新阳不是信仰のblog

您所在的位置:网站首页 core sync是什么软件mac 新阳不是信仰のblog

新阳不是信仰のblog

2023-03-30 13:35| 来源: 网络整理| 查看: 265

SealDice: 指令手册

概述

一个简单易用的跑团骰子系统。

形象是海豹,可以被叫做海豹骰、豹骰,豹子骰之类。

现在试试 (官网首页,点在线试用)

跑团速通攻略 (我是PL,告诉我怎么用就好)

搭建攻略 (我是骰主,告诉我怎么搭建)

MOD和自定义 (我是MOD作者,有什么好玩的?)

特性:

点击运行,一键部署 非常友好的界面 与现有主流骰系极为相似的指令 coc7 dnd5e fate指令支持 简单强大的自定义功能 牌堆等娱乐功能 极低的资源占用,程序包20MB,占用内存约30MB 支持Windows/Linux/macOS系统,x64和arm64架构 每12小时自动备份(间隔可调整),也可以通过指令备份,不丢失任何数据! Golang编写

目前已经基本实现了主流骰子提供的指令,主要参考ZhaoDice(赵骰)、Dice!(溯回系)、SinaNya(塔系)三系骰子的手册和表现。

为了方便使用,默认随项目附带了go-cqhttp的二进制文件和许可协议。

快速跳转

查看特色功能

搭建海豹核心

联系方式&官方群

骰子自定义

COC团使用

DND团使用

已知支持规则

手册信息

本手册适用于1.0.2及以上版本

最后更新: 2023-02-04

手册使用: CC BY-NC-SA 4.0协议

源码地址: https://github.com/sealdice/manual

手册由制作组以及网友共同编写。其中难免错漏以及不实之处,或随版本更迭过时之处,欢迎在源码地址提交issue指出。或提交PR来补充手册内容,非常感谢

提要

手册中的所有指令都将以标准格式书写,实际使用时宽松许多。

但适当空格是好习惯,不是吗?

本手册的指令使用这样的格式来进行介绍:

1.指令 (参数C)

其中,括起来的内容代表”某个概念“,实际指令不需要加

而()括号括起来的内容代表这是一个可选参数,实际指令也不需要加()

以骰点指令举例:

1.r ()

是必填内容,譬如是d100,原因是可选内容

1.r d100 高于50就打扫卫生

会得到这样的结果:

1由于高于50就打扫卫生,掷出了 d100=[1d100=90]=90

接下来,本手册的指令示例都将以这种形式书写:

12.r d100 高于50就打扫卫生 // 这部分是解说,不算在指令里Dice: 由于高于50就打扫卫生,掷出了 d100=[1d100=90]=90

第一行为指令,第二行Dice:开头的代表骰子的回复,直到末尾。

阅览建议

强烈建议在阅读本文档时,展开左侧的目录

有些文档是面向骰主的,可以快速跳过自己不需要的章节。

常见问题 (FAQ)> 和其他核心的不同之处

参见特色功能一节

角色卡有一个区别就是每个群都有一张单独的空白卡,所以单群很快跑完的短团,你可以直接st录入属性再nn录入角色名之后就开跑。

详见 [角色卡指令,即pc的区别](#.pc 角色卡管理)

> 为啥海豹不理我?

可能性一:私聊非好友

可能性二:遭到了风控发不出来。

可能性三:请检查当前开启的扩展,例如当coc7扩展关闭时,sc等指令是不会回应的。请运行.ext coc7 on开启对应扩展。

骰主可以后台查看骰子接收到的指令和反馈,风控也会提示。

另外骰主在海豹后台可以直接试指令。

如果确实是没反应!!请加入海豹群反馈!

> 可以关闭暗骰吗?

海豹不会去私聊非好友帐号,所以不必担心暗骰会影响帐号安全。

> 退群指令?1.bot bye 或 .bot exit 或 .dismiss

骰主也可以后台在群组管理中操作退群。

> 登录服务器开浏览器使用好麻烦!能远程直接访问UI吗?

可以,对于大部分VPS,可以使用http://IP:3211 (IP是你服务器的IP)直接访问后台

像是腾讯云轻量服务器,需要进行设置“服务器管理 - 防火墙 - 添加端口 3211,TCP”

白嫖的Oracle Linux服务器,不仅需要后台设置,还需要放行端口:

1sudo iptables -I INPUT -s 0.0.0.0/0 -p tcp --dport 3211 -j ACCEPT

Windows服务器也一样,需要额外关闭内置防火墙,或者设置端口放行。

千万记得在基本设置中设置密码!!!

> 在服务器上登录时说“需要在同一WIFI下扫码”怎么办

首先确认使用安卓协议,并且输入密码登录(不要使用无密码的扫码登录,现在已经很不好用了)。

有几种办法:

[首选] 让手机跟服务器真的处于同一个网络

此方法本来是方案3,随着时间推移以及审核的严格,现在逐渐成为了最佳方案。

这个办法略微繁琐,不过好在一劳永逸。

步骤一: 配置防火墙

以腾讯云轻量服务器为例,点入“服务器”,再点击卡片。

进入后点击“防火墙”,随后“添加规则”,这里选择TCP协议,端口输入13325(演示图片中为13326),点击确定。

搞定,其他服务商大同小异。

已知需要做此配置的服务商有:腾讯云轻量服务器、阿里云、华为云。

步骤二:服务器端运行工具

在V1.1.0 v20221231更新后,在海豹骰中集成了socks工具。

点击图中辅助工具-13325端口按钮。

稍等片刻后,出现如下窗口。

点击OK。

V1.1.0 v20221231以下版本可以手动下载socks工具。

如果你是windows服务器就下载socks5_0.2_windows_amd64.zip,地址:

https://github.com/fy0/socks5-tool/releases

运行起来之后,显示一串这样的文本:

12345678910http/socks5简易工具©sealdice.com将在服务器上开启一个socks5服务,端口13325,默认持续时长为25分钟将在服务器上开启一个http代理服务,端口13326,默认持续时长为25分钟可能的公网IP: 12.34.56.78请于服务器管理面板放行你要用的端口(一般为13325即socks),协议TCP如果是Windows Server 2012R2及以上系统,请再额外关闭系统防火墙或设置规则放行正在启动服务: 0.0.0.0:13326正在启动服务: 0.0.0.0:13325

特别的,如果是Windows Server 2012R2及以上系统,请再额外关闭系统防火墙或设置规则放行。具体做法搜索关键字Windows server 关闭防火墙

步骤三:手机端连接

你需要一个代理软件,比如postern程序,如果可能的话你可以从Google play下载,你也可以在用户群里找到它。

然后在你将要扫码的手机上启动它,弹出的窗口都点击确定。

点击默认存在在的代理,将他删除,然后点击添加代理服务器,按照下图填写。

保存后点击左上角Postern的图标,点击配置规则,类似前文删除代理,删除掉默认的规则1和规则2,然后点击添加规则。如图选择匹配类型和动作,之后会自动填入代理/代理组。

保存后重启软件。

现在就配置完成了,手机上打开浏览器进入 https://ip138.com/ 如果显示的IP地址和服务器一样,那么配置正确。如果打不开网页或提示”当前wifi不能访问网络”,可能是防火墙没配置好。如果IP不一样,可能是代理没配置上。

现在可以进入海豹UI,重新进行登录流程了。如果以后再出类似情况,直接重复步骤二、三即可

本机上完成扫码登录,然后将登录过的配置文件覆盖到服务器上。

具体目录是 data/default/extra/go-cqhttp-qq12345

当然如果你没做过自定义配置,可以整个复制。

使用密码登录,重试3次左右,有概率直接上号

手机挂加速软件

手机挂爱加速代理扫码,跟服务器同一个区域就行(或其他加速软件也可以尝试)

出自: https://github.com/Mrs4s/go-cqhttp/issues/1469 JHeyzo

> @其他骰子做检定的时候,海豹也会回应,怎么办

首先更新到0.99.8以后的版本。

使用这个指令将其他骰子进行标记:

1.botlist add @骰子A @骰子B

会有如下效果:

当有人@该骰发指令,海豹不会做出回应 该骰发出的指令和消息,海豹不会回应,这可以有效避免关键词触发的无限复读

之所以不保留传统@效果,是因为海豹基于@功能做了一项扩展,其适用场景远多于同群多骰。

具体可以参见文档的这一节:ra/rc 指令 -> 对他人做检定

> 为啥好像反应慢一拍

首先确定是否为网络问题。其实指令计算是非常快的(可以在日志面板观察到)。

但是发送消息会有随机延迟,这是为了防止引起企鹅的警惕。

随机延迟间隔:0.4-0.9秒,可以在设置中调整。

> 我希望在进群或者被踢出时候通知我

见界面的“综合设置-基本设置”

在“消息通知列表”中可以添加。目标可以是群,也可以是个人。

通知内容:加群邀请、好友邀请、进入群组、被踢出群、被禁言、自动激活、指令退群。

> 支持QQ频道吗?

支持,邀请入频道后 @骰子 .bot on 即可开启。

默认不记录频道消息,也不自动开启(bot off状态)。

见“综合设置-基本设置”

特别的,骰子不会同意频道邀请,需要骰主上号同意。

> 为什么总是不出二维码就登录失败,或者提示 message:not found ?

请将软件完全解压后使用!

> 总是登录失败怎么办?

先确认完全解压了,并以安卓协议登录。

如果登录不成功,删号,重新启动海豹再试几次。

如果还不行,观察日志,你可能看到这几种中的一种或者是其他情况:

12345[ERROR]: fetch qrcode error: Packet timed out // 较为常见[ERROR]: Protocol -> sync channel error: Packet failed to sendPacket: connection closed [ERROR]: Protocol -> decrypt payload error: unknown flag

此时大致有几种可能:

帐号登录太频繁,被企鹅关注了,等待一阵之后或者换号再试。 帐号的风险等级过高 当前IP地址被企鹅重点关注 如果是新账号,完全可能连续扫码失败无法登录。建议真机上挂一两天。

如遇到其他情况欢迎反馈。

> 怎么同时运行多个海豹?

以运行两个为例:

我们假设你第一只海豹已经配置好了,当前正在运行,端口为默认的3211。

现在,你需要找到安装包换个目录再解压一份海豹,我们叫他“海豹2”。

你进入海豹2目录直接双击执行,它会自动检测端口,因为3211端口已经被占用,所以他会弹窗问你要不要换端口,你直接点是就可以了。

如果你想自定义端口,就有点复杂:

在海豹1目录下创建一个”启动.cmd”,用文本编辑器编辑,里面写:

1sealdice-core --address=0.0.0.0:3211 -m

然后在在海豹2目录下如法炮制,也弄一个“启动.cmd”,端口号改一下:

1sealdice-core --address=0.0.0.0:3212 -m

分别意思是第一只海豹开在3211端口,第二只开在3212端口。

分别使用”启动.cmd”运行两只海豹即可。首次运行后会记住配置。

如果运行更多,以此类推。

> Mac/Linux/树莓派可以搭建吗?

可以,见 [Linux 部署](#Linux 部署) 和 [Mac 部署](#Mac 部署)。

> 用iPad/安卓手表登录?

可能目前使用gocqhttp填写的设备参数不太对,导致iPad登录比较容易失败。

可以先在指定设备上,使用安卓协议登录,随后删除账号换用iPad协议登录,有概率成功。

如果有人熟悉gocqhttp上iOS设备的型号数据,希望不吝赐教。

> 我机器上启动非常慢,而且托盘点不出来右键菜单(1.0.0以后版本)?

请确认你的硬盘状态是否还好,一般来说是磁盘IO性能过低导致的,常见于软路由设备。

这种情况可以删除 data/helpdoc 来进行提速,代价是**[.find/.查询 查询指令](#.find/.查询 查询指令)**出不来东西。

> 能在手机上搭建吗?

可以使用termux运行arm64版本,但是我这里挺容易被杀后台。

闲置手机可以用来玩一下。

在手机上运行(termux)

可能以后会出手机版本(是饼,但至少希望+1)

> 我是Master,怎么帮人取出log?

见 骰主代取LOG

骰主具有很大的权限,海豹一开始对骰主看LOG做了一定的限制,不过后来觉得这并无意义——因为骰主有终极方案,即上号。

所以还请各位选择自己信任的骰主,也请各位骰主谨慎对待大家的信任!

> 我忘了UI密码!

关闭海豹,用文本编辑器打开dice/dice.yaml,删除uiPasswordHash那一行重新启动。

速通攻略

如果你需要以PL身份参团,并快速掌握常用指令,可以遵循此节内容。

或者你是其他骰系的使用者,想要快速过一遍常用指令用法,这篇文档也适用于你。

当前内容以实际跑团过程为蓝本编写,适用于多数团。

COC玩家

开启COC模式(默认开启): .set coc // 注意中间有空格

1. 车卡录卡

临时创建人物/天命

1.coc5

录卡 - 常规团

12345678// 海豹各群数据独立,如果单群跑完全程,不需要开团前存卡!!!.nn 角色名.st 力量70str70敏捷70dex70意志70pow70体质70con70外貌50app50教育70知识70edu70体型70siz70智力70灵感70int70san55san值55理智55理智值55幸运50运气50// 开始跑团 ....// 模组跑完了,想在别的群用此人物,就存卡,否则不需要:.pc save 角色名

录卡 - 秘密团

123456// 小群录卡.pc new 角色名.st 力量70str70敏捷70dex70意志70pow70体质70con70外貌50app50教育70知识70edu70体型70siz70智力70灵感70int70san55san值55理智55理智值55幸运50运气50// 大群绑定人物.pc tag 角色名

改群名片(骰子必须有管理员权限)

1.sn coc 2. 骰点1.r 3d6*5 3. 检定123.ra 聆听.ra 幸运70.ra 3#p射击 4. 理智检定、掉血12.sc 0/1d4.st hp-1d4 DND玩家

感谢逛街提供的指令思路和部分文案。

开启dnd模式: .set dnd

1. 录卡1234.st 模板 // 或 .dst 模板// 根据模板录入数值,下面只是示例。冒号不好写的话,可以写为等号.dst 力量:10 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax:10 .... 2. 骰点

.rd //掷一个默认骰(默认20面)

.rd+() //掷一个默认骰,并+()

.rd() //投掷一颗数量指定面术的骰子

.r() d() //投掷指定数量、指定面数的骰子

.rd优势 //投掷两次骰子取优势

.rd劣势 //投掷两次骰子取劣势

.r()#() d() +() //掷指定数量、指定数值的骰子指定次

12345678910111213141516171819.rdDice:掷出了 d+1=3[1d20=3] + 1=4.rd+1Dice:掷出了 d+1=3[1d20=3] + 1=4.r2d8+1Dice:掷出了 2d8+1=3[2d8=3, 2+1] + 1=4.rd8优势+1Dice:d8优势+1=4[{4 | 3 }] + 1=5.r 5#2d8+1掷骰5次:2d8+1=13[2d8=13, 7+6] + 1=142d8+1=13[2d8=13, 7+6] + 1=142d8+1=11[2d8=11, 3+8] + 1=122d8+1=11[2d8=11, 3+8] + 1=122d8+1=8[2d8=8, 7+1] + 1=9 3. 检定12.rc 运动 // 结果为: 8[1d20=8] + 6[运动=6] = 14.rc 优势 力量+4 // 结果为: 17[{17 | 11 }] + 12[力量=12] + 4 = 33

更多详情请参阅扩展-dnd5e一节,如死亡豁免、法术位、长休等指令。

核心指令

核心指令是无法被关闭的指令。

与之相对的概念是扩展指令,扩展指令可以被关闭。

举例来说,输入.ext coc7 off关闭coc7扩展,那么相关的指令,例如.st .sc .ra .setcoc等就不会响应了。

关于扩展的概念,请阅读下方“扩展”一节。

特别提醒:

你可能会觉得指令很复杂,但其实,现在的骰子就是如此,我自己也被需求的规模吓了一跳。

如果你很熟悉赵系、溯回系、塔系,特别是前两者,那么90%的内容是一样的!

.r 骰点

格式: .r ()

别名: .roll .rd

可用范围: 群内、私聊

常用示例

特别提醒一下,如果不写骰子算符(d/b/p,概念见下),r指令相当于计算器

1234567891011121314151617.rDice: 掷出了 D100=69.r d50Dice: 掷出了 d50=[1d50=48]=48.r d50 天气不错Dice: 由于天气不错,掷出了 d50=[1d50=4]=4.r 5d24 骰5个24面骰Dice: 由于骰5个24面骰,掷出了 5d24=[5d24=60, 7+20+15+1+17]=60.r 4d6k3 骰4个6面骰,选3个最大的Dice: 由于骰4个6面骰,选3个最大的,掷出了 4d6k3=[{6 5 3 | 1 }]=14.r 100 + 3 * 2Dice: 掷出了 100 + 3 * 2=100 + 6=106 奖励骰/惩罚骰

一类特殊的骰子,线下游戏时,D100是两个10面骰骰出来的,一个是个位,一个是十位。

如果十位骰为10,个位骰为1-9,那么结果是1-9(十位视为0)

如果两个10面骰都骰到10,那结果就是100

奖惩骰的机制是,多指定数量个十位骰,例如获得2个奖励骰,那么就丢3个十位骰。

假设十位骰结果是{4,5,8},个位骰结果是2,那么最终结果就是42(取好的结果)

如果是惩罚骰,那么最终结果是82(取坏的结果)

12345678.r bDice: 掷出了 b=[D100=72, 奖励 4]=42.r b3Dice: 掷出了 b3=[D100=96, 奖励 4 6 3]=36.r p4 惩罚骰Dice: 由于惩罚骰,掷出了 p4=[D100=87, 惩罚 5 7 8 7]=87 多轮骰点1234567.r 4#d10Dice:掷骰4次:d10=[1d10=9]=9d10=[1d10=3]=3d10=[1d10=7]=7d10=[1d10=8]=8 DND5E优势骰劣势骰12345678910.set 20Dice:设定默认骰子面数为 20提示: 20面骰。如果要进行DND游戏,建议先执行.ext dnd5e on和.ext coc7 off以避免指令冲突.r d20优势Dice: 掷出了 d20优势=[{7 | 6 }]=7.r d劣势掷出了 d劣势=[{16 | 18 }]=16

d20优势 = 2d20k1,即2个d20取结果高的一个

d20劣势 = 2d20q1,即2个d20取结果低的一个

fvtt骰点兼容1234567891011.r d20kh // 优势骰(其实不是特别兼容)掷出了 d20kh=[{10 | 3 }]=10.r d20kl // 劣势骰掷出了 d20kl=[{6 | 15 }]=6.r 4d6dl1 // 丢4排除1个最低值掷出了 4d6dl1=[{5 3 2 | 1 }]=10.r 4d6dh1 // 丢4排除1个最高值掷出了 4d6dh1=[{3 3 5 | 6 }]=11 fate 命运骰

一种特殊的六面骰,六个面分别为 - - 0 0 + +,分别代表-1 0 1

骰点时投掷4次,加在一起为结果。例如某次结果是[-+++],为-1 + 1 + 1 + 1 = 2

12.r fDice: 掷出了 f=[---+]=-2

带补正的情况:

12.r f+1掷出了 f+1=0[+0-0] + 1=1 WOD/无限骰点

这是WOD骰点规则,国内更多见于无限团,默认使用d10。

这个规则需要设定几个参数:骰池数量X、加骰线Y、成功线N,其中XY是必须的,成功线默认为8

这是一个多轮骰点规则,骰X个d10,每有一个≥成功线的骰,成功数+1,每有一个≥加骰线的骰,加骰数+1,随后下一轮骰点使用上一轮的加骰数作为骰池数量。

12.r 10a6k4m9掷出了 10a6k4m9=[成功11/16 轮数:3 {1,,5*,3,,5*,,,2,},{5*,2,,1,4*},{5*}]=11

语法 XaYmZkN // X骰池数量,Y加骰线,m面数,N成功线(≥N记为一个成功)

特别的,若Y=0则不加骰,这也可以用到其他一些TRPG游戏中去。

同时,额外支持q参数(与k参数相对),可使用q5参数计算≤5的骰数

双十字骰点

这是一种多轮的骰点规则。一般为骰若干个d10,并指定暴击值。

如果达到暴击值,则进入下一轮,直到全部骰子都不能暴击。

最终的骰点结果为: 暴击轮数 * 10 + 最后一轮中最大的点数

12.r 4c3m7掷出了 4c3m7=[出目32/9 轮数:4 {,2,,},{,1,2},{},{2}]=32

骰4个d7,暴击值为3。若不设置m则为4个d10

混合运算12345678.r 30 + (-1d20) + 49Dice: 掷出了 30 + (-1d20) + 49=30 + -1[1d20=1] + 49=78.r d50 * 3 + 2Dice: 掷出了 d50 * 3 + 2=21[1d50=21] * 3 + 2=65.r d50 * 3 + (2 - p2) 多项式Dice: 由于多项式,掷出了 d50 * 3 + (2 - p2)=25[1d50=25] * 3 + -64[D100=6, 惩罚 6 5]=11

事实上,海豹核心支持了这些算符:

常用数学算符: 加减乘除(+-*/)、乘方(**)、括号

骰子算符: 多面骰(d, d(k)(q)),奖励骰(b, b)、惩罚骰(p, p)

用字母表示的骰子算符有些反直觉,其实它们和加减乘除是一样的:

12345.r 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)Dice: 掷出了 1d1d1d1d1d1d1d1d1d1d1d1d1d1d(20+1d3*4)=13.r 1d10+(1+32)d(4*6)d20Dice: 掷出了 1d10+(1+32)d(4*6)d20=1[1d10=1] + 3941[33d24=384,384d20=3941]=3942 .rh 暗骰

格式: .rh ()

别名: .rhd

可用范围: 群内

这个指令的格式与.r完全相同,只不过效果是在群里撂下一句提示,然后把骰点结果私聊发给你。

不过注意!由于企鹅的严打,陌生人私聊极其容易触发风控,所以私聊发送只会发给好友。如果你不是骰子的好友,看不到任何结果。

12345678// 群内.rh d50Dice: 命运正在低语!// 私聊Dice:来自群(123)的暗骰:掷出了 d10=[1d10=3]=3 .rx / .rxh 特殊骰点

格式: .rx ()

别名: 无

可用范围: 群内、私聊

这个指令一般跑团可以不用看了。

它主要和表达式是否允许读取变量有关。举个例子:

1234567891011121314.r 聆听Dice: 由于聆听,掷出了 D100=54.rx 聆听Dice: 掷出了 聆听=[聆听=60]=60.rx 聆听+d10Dice: 掷出了 聆听=[聆听=60] + 8[1d10=8]=68.rx 侦查+1d20**2Dice: 掷出了 侦查+1d20**2=75[侦查=75] + 324[1d20=18]=399.rx d(侦查)Dice: 掷出了 d(侦查)=[侦查=60,1d60=52]=52 .bot 骰子管理

格式: .bot on/off/bye/about

别名: 无

可用范围: 群内、私聊

较为简单的指令,直接看例子:

1234567891011121314.bot on // 开启Dice: 已启用 SealDice 0.99内测版 v20220312.bot off // 关闭Dice: 停止服务.bot bye // 退群Dice: 收到指令,5s后将退出当前群组.bot // 或者 .bot aboutDice: SealDice 0.99内测版 v20220312供职于8个群,其中3个处于开启状态上次自动保存时间: 2022-03-13 04:57:55 UTC群内工作状态: 开启 .nn 角色名设定

格式: .nn // 查看当前角色名

格式: .nn () // 修改角色名

格式: .nn clr // 重置角色名

别名: 无

可用范围: 群内

若有角色名参数,则进行设定。若无角色名,重置回默认名字。

1234567891011.nn 简·拉基·茨德Dice: (303451945)的昵称被设定为.rDice: 掷出了 D100=16.nnDice: 玩家的当前昵称为: .nn clrDice: (303451945)的昵称已重置为 .set 设定骰子面数

格式: .set // 查看当前面数设置

格式: .set // 设定群内骰子面数

格式: .set --my // 设定个人专属骰子面数

格式: .set clr // 清除群内骰子面数设置

格式: .set clr --my // 清除个人骰子面数设置

别名: 无

可用范围: 群内、私聊

1234567.set 20Dice: 设定默认骰子面数为 20.set个人骰子面数: 0群组骰子面数: 20当前骰子面数: 20

设定骰子面数,默认值是100

优先级: 个人 > 群 > 默认(100)

.pc 角色卡管理

格式:.pc new // 新建角色并绑卡

格式:.pc tag // 当前群绑卡/解除绑卡(不填角色名)

格式:.pc untagAll // 全部群解绑

格式:.pc list // 列出当前角色

格式:.pc save // [不绑卡]保存角色,角色名可省略

格式:.pc load // [不绑卡]加载角色

格式:.pc del/rm // 删除角色

可用范围: 群内、私聊

请特别注意这个指令!!

海豹各群数据是独立的,也就是说相当于每个群都有一张空白卡。

因此如果你在单群进行游戏,那么并不需要录角色!也不会影响其他群的游戏!

123.st clr // 如果这群有你的角色数据,先清掉.nn 角色名.st 力量50敏捷60

这样就可以直接开始游戏了。

如果跑完团想要在其他群使用这个角色,在使用pc save 角色名进行存卡。

如果你跑秘密团,那么需要用到绑卡功能,在小群:

12.pc new 角色名 // 创建角色,并绑卡.st 力量50敏捷60

然后在主群:

1.pc tag 角色名

就可以了!这样两个群的角色数据是联动的。

.find/.查询 查询指令

格式: .find // 关键字可以多个,用空格分割

格式: .find // 显示该ID的词条

格式: .find --rand // 显示随机词条

别名: .查询

可用范围: 群内、私聊

海豹搭载了两个查询核心:

全文搜索 - 提供强大的索引功能,能够查询文档内容中的关键字,但只能支持x86设备。文档多的话会拖慢启动速度。 快速文档查找 - 只在标题中进行查找,速度很快。用于性能/内存受限的场景,以及手机端。 全文搜索!

来看看全文搜索吧,它非常强大,这是搭载了DicePP(梨骰)项目整理的查询资料后的效果:

12345678910111213141516.查询 30尺 法术Dice:全部结果:[序号3066]【术士:超魔法:远程法术】 匹配度 0.16[序号3015]【游侠:驯兽师:法术共享】 匹配度 0.13[序号2396]【法术详述:迷踪步】 匹配度 0.12[序号1319]【法术详述:阿迦纳萨喷火术】 匹配度 0.12[序号507]【法术详述:智能堡垒/智力堡垒/智慧堡垒/智能壁垒/心智堡垒/心智壁垒】 匹配度 0.12[序号2514]【法术详述:水下呼吸/水中呼吸】 匹配度 0.11[序号2212]【法术详述:原力法阵】 匹配度 0.11[序号1403]【法术详述:众星冠冕/星辰冠冕/星之冠冕】 匹配度 0.11[序号2243]【法术详述:造水/枯水术/造水术/枯水术】 匹配度 0.11[序号2176]【法术详述:秘法眼】 匹配度 0.11(本次搜索由全文搜索完成)

因为多个文本匹配度相近,因此没有列出最佳匹配条目的正文内容。用这条指令可以查看:

1234567891011.查询 2212Dice:词条: 法术详述:原力法阵原力法阵 Circle of Power圣武士5环 防护施法时间:1动作施法距离:自身(30尺半径)法术成分:V持续时间:专注,至多10分钟你身上发出神圣能量并以扭曲散溢的魔法能量构成一个半径30尺的球状力场。法术持续时间内力场将以你为中心随你移动。力场范围内的友方生物(包括你自己)为对抗法术或其他魔法效应而进行的豁免检定具有优势。此外,受本法术效应影响的生物在对抗豁免成功则伤害减半的法术或魔法效应时,若成功则不受伤害。

这么好用,那代价是什么呢?

更多的内存占用。变慢的启动速度。

给个参考:搭载了怪物之锤文本,以及梨骰DND查询包之后,海豹核心占据了80MB内存。

大致可以这样换算:每1MB文本占15MB内存

快速文档查找

指令是一样的,因此善乏可陈。

示例如下:

12345678910.find 测试词条dice:最优先结果:词条: 测试:测试词条他在命运的沉浮中随波逐流, 扮演着受害与加害者的双重角色全部结果:[序号2]【测试:测试词条】 匹配度 67.00(本次搜索由快速文档查找完成) 致谢

默认搭载的几个示例文档:

其中COC《怪物之锤查询》的整理者为:蜜瓜包和October

COC魔法大典的整理者为:魔骨、NULL、Dr.Amber

DND系列资料的整理者主要为DicePP项目组成员,包括Farevell、梨子、花作噫、邪恶、惠惠、赵小安等

这些资料的原始出处和译者很多已经不可考,此处无法一一列出,甚为遗憾。

也在此感谢一代又一代无名作者和译者做出的工作。

.help 帮助指令

格式: .help ()

格式: .help reload // 重新装载帮助文档,仅master可用

别名: 无

可用范围: 群内、私聊

显示帮助

.botlist 机器人列表

格式: .botlist add @A @B @C // 标记群内其他机器人,以免发生误触和无限对话

格式: .botlist add @A @B --s // 同上,不过骰子不会做出回复

格式: .botlist del @A @B @C // 去除机器人标记

格式: .botlist list // 查看当前列表

别名: 无

可用范围: 群内

这个指令用于标记群内的其他骰子或娱乐机器人,以便于各司其职。

被标记后会有如下效果:

当有人@该骰发指令,海豹不会做出回应 该骰发出的指令和消息,海豹不会回应,这可以有效避免关键词触发的无限复读

之所以不保留传统@效果,是因为海豹基于@功能做了一项扩展,其适用场景远多于同群多骰。

具体可以参见文档的这一节:ra/rc 指令 -> 对他人做检定

示例:

12345.botlist add @某公骰Dice:新增标记了1个帐号,这些账号将被视为机器人。因此别人@他们时,海豹将不会回复。他们的指令也会被海豹忽略,避免发生循环回复事故

此外,被标记的当事人可以发出指令解除自己的标记。

.ext 扩展管理

格式: .ext on/off //开关

格式: .ext // 查看信息

格式:.ext list // 查看扩展列表

可用范围: 群内

海豹除了核心指令之外,都被设计为可插拔的,目前有7个内置扩展。

关闭对应扩展会连同扩展带来的指令一块关闭。

注意!每个群可以分别开启不同的扩展。

123456789101112131415161718192021222324252627282930.extDice:检测到以下扩展:1. [开]coc7 - 版本:1.0.0 作者:木落2. [开]log - 版本:1.0.0 作者:木落3. [开]fun - 版本:1.0.0 作者:木落4. [开]deck - 版本:1.0.0 作者:木落5. [关]reply - 版本:1.0.0 作者:木落6. [开]dnd5e - 版本:1.0.0 作者:木落7. [开]story - 版本:1.0.0 作者:木落使用命令: .ext on/off 可以在当前群开启或关闭某扩展。命令: .ext 可以查看扩展介绍及帮助.ext coc7 onDice: 打开扩展 coc7.ext replyDice:> [reply] 版本1.0.0 作者木落> [尚未实现]智能回复模块,支持关键字精确匹配和模糊匹配提供命令:.reply.ext reply offDice: 关闭扩展 reply可以批量开启或关闭,如.ext fun deck reply off

开启或关闭扩展能够直接改变骰子响应的命令。

例如coc7扩展提供了.coc /.st / .ra / .rc / .sc / .setcoc / .ti / .li一系列指令。

而dnd5e扩展提供.st .rc .ri

扩展关闭后,这些指令也会失效,可以有效避免指令混淆(每个群都可以启用不同的扩展)

例如我在A群打开coc7和deck两个扩展,B群可以只开启deck扩展,等等。

未来将制作更多官方扩展,以及提供自定义扩展脚本接口。

特别的,js插件可以创建扩展了,如果骰子安装了js插件,他可能会出现更多的扩展。

.master 骰主指令

格式: .master add me // 将自己标记为骰主

格式: .master add @A @B // 将别人标记为骰主

格式: .master del @A @B @C // 去除骰主标记

格式: .master unlock // (当Master被人抢占时)清空骰主列表,并使自己成为骰主

格式: .master list // 查看当前骰主列表

格式: .master relogin // 30s后重新登录,有机会清掉风控(仅master可用)

格式: .master list // 查看当前骰主列表

格式: .master reboot // 重新启动(需要二次确认)

格式: .master checkupdate // 检查更新(需要二次确认)

别名: 无

可用范围: 群内、私聊

补充:这条指令做了@排除,如果存在@,且自己没有被@,不作回应。

对于一个无主骰,任何人都可以进行标记。

一旦有人成为骰主,此命令将只有骰主可以使用。

所有骰主都可以踢掉其他骰主,包括自己在内。

骰子的真正所有者,可以从后台看到解锁口令,来通过.master unlock命令直接取得骰主权限。

.send 对骰主留言

格式: .send

格式: .send to 要说的话 // 骰主回复,举例. send to QQ:12345 感谢留言

别名: 无

可用范围: 群内、私聊

补充:这条指令做了@排除,如果存在@,且自己没有被@,不作回应。

给骰主留言吧!

不过首先,必须存在一名骰主,正如必须有一个巫妖王。

除了留言之外,骰主将看到你的名字和帐号。

如果是群内留言,还将看到群名和群号。

同样,骰主可以通过这个指令进行回复,对方会看到这样的回复内容:

12本消息由骰主通过指令发送:感谢反馈! .welcome 迎新设置

格式: .welcome on // 开启

格式: .welcome off // 关闭

格式: .welcome show // 查看当前欢迎语

格式: .welcome set // 设定欢迎语

扩展: coc7.coc 制卡指令

格式: .coc () // 制卡指令,返回组人物属性

别名: 无

可用范围: 群内、私聊

1234567891011121314151617.coc 3Dice:的七版COC人物作成:力量:40 敏捷:80 意志:30体质:80 外貌:50 教育:45体型:55 智力:60HP:13 幸运:50 [440/490]力量:55 敏捷:75 意志:45体质:30 外貌:65 教育:60体型:65 智力:50HP:9 幸运:25 [445/470]力量:45 敏捷:55 意志:50体质:55 外貌:60 教育:85体型:50 智力:55HP:10 幸运:60 [455/515] .en 技能成长

格式: .en (技能点数) (+(/)) // 整体格式,可以直接看下面几个分解格式

格式: .en // 骰D100,若点数大于当前值,属性成长1d10

格式: .en (技能点数) // 骰D100,若点数大于技能点数,属性=技能点数+1d10

格式: .en (技能点数) + // 骰D100,若点数大于当前值,属性成长成功成长值点

格式: .en (技能点数) +/ // 骰D100,若点数大于当前值,属性成长成功成长值点,否则增加失败成长值点

别名: 无

可用范围: 群内

1234567891011121314.en 侦查Dice:的“侦查”成长检定:D100=68/66 成功“侦查”增加了1d10=3点,当前为69点角色信息已经变更,别忘了使用.ch save来进行保存!// 以下例子省略掉骰子的回复.en 侦查30.en 侦查 +1d20 // 若成功,成长1d20.en 侦查 +1d5/1d10.en 侦查 +-1d5/1d10.en 侦查 +(-1d5)/1d10 // 跟上一句相同,带括号容易理解一点 .st 属性设置

格式: .st格式: .st show // 展示个人属性格式: .st show ... // 展示特定的属性数值格式: .st show // 展示高于的属性,如.st show 30格式: .st clr/clear // 清除属性格式: .st del ... // 删除属性,可多项,以空格间隔格式: .st help // 帮助格式: .st // 例:.st 敏捷50格式: .st ± // 例:.st 敏捷+1d50,请注意目前+或-要跟在属性后面,不得空格

别名: 无

可用范围: 群内

(待补完)

.ra/rc 技能检定

格式: .ra/rc (@某人)

格式: .ra (@某人) // 如 .ra 困难侦查

格式: .ra b (@某人) // 奖励骰或惩罚骰

格式: .ra p (@某人) // 奖励骰或惩罚骰

格式: .ra b (@某人)

别名: 无

可用范围: 群内

属性检定指令,当算出的值小于等于,如计算 D100 < 聆听,

若小于等于,则检定通过。当@某人时对此人做检定。

rc是规则书检定。而ra是房规检定。

区别主要在于对大成功/大失败的判定方式。

当.setcoc 0时,ra和rc等价。

可以使用类似多轮骰点的多轮检定。

举例12345678910111213141516171819202122.ra 聆听Dice: 的聆听检定结果为: d100=59/76, ([1d100=59]) 成功.ra 困难侦查Dice: 的困难侦查检定结果为: D100=7/12 成功了!这要费点力气.ra b 射击Dice: 的射击检定结果为: b=60/60, ([D100=60, 奖励 0]) 成功.ra 3# b 射击Dice: 的射击进行了3次检定,结果为:b=17/60, ([D100=17, 奖励 1]) 成功(极难)b=32/60, ([D100=92, 奖励 3]) 成功b=49/60, ([D100=49, 奖励 6]) 成功// 其实指令可以连写,不过不是很建议,例如这样的写法(溯洄骰).ra3#b射击// 也支持这样的写法(赵骰).rab3#射击他们都与上面的写法等价 对他人做检定

如果kp/dm希望对某人做检定,可以检定时@对方,同时适用于暗中检定。

12345.ra 侦查 @猛男Dice: 的侦查检定结果为: d100=95/55, ([1d100=95]) 失败!.ra 侦查 // 不@是自己Dice: 的侦查检定结果为: d100=48/88, ([1d100=48]) 成功 .rah/rch 暗中检定

格式: .rah/rch (@某人)

别名: 无

可用范围: 群内

与.ra/.rc完全相同,只不过会将结果私聊发送

.rav/rcv 对抗检定

格式: .rav/.rcv (@某人) // 自己和某人进行对抗检定

格式: .rav @某A @某B // 对A和B两人做对抗检定,分别使用输入的两个技能数值

别名: 无

可用范围: 群内

写法举例: 侦查、侦查40、困难侦查、40、侦查+10

请注意,海豹核心的rav指令是不需要后手确认的,相当于面团中RP说明行为后,再骰对抗。这与塔系rav指令不同

一段典型(雾)用法:

12345678910Alice: 唔,劲啊!可我今日注定将你轰杀至渣啊!吃我一拳,Bob!KP: Bob,Alice要打你,你要反击还是躲避?Bob: 呵,汝今日便要葬在这里呀!反击!给我败罢!Alice: .rav 斗殴 @BobDice:对抗检定: 40-> 属性值:40 判定值:36 成功 20-> 属性值:20 判定值:34 失败胜利!

这里给出一些详细的用法示例:

1234567891011121314151617.rav/.rcv 技能 @某人 // 自己和某人进行对抗检定.rav 技能,b1 @某人 // 同上,我方有一个奖励骰 .rav 困难技能60 @某人 // 同上,但是困难等级,技能值60。.rav 困难技能+10 @某人 // 同上,但是有10的加成。.rav 技能 @某A @某B // 对A和B两人做对抗检定.rav 技能 技能 @某A @某B // 对A和B两人做对抗检定,分别使用输入的两个技能数值.rav 技能 困难技能 @某A @某B // 同上,带难度.rav 技能,b1 困难技能 @某A @某B // 同上,A带一个奖励骰.rav 60 40 @某A @某B // 最简化版本,A的60点对抗B的40点 .sc 理智检定

格式: .sc /

格式: .sc

格式: .sc b /

别名: 无

可用范围: 群内

对理智进行一次D100检定,根据结果扣除理智。

如“.sc 0/1d3”为成功不扣除理智,失败扣除1d3。大失败时按掷骰最大值扣除。

支持复杂表达式。如.sc 1d2+3/1d(知识+1)

大成功/大失败判定遵循房规。

本指令支持使用**对他人做检定**。

.setcoc 设置房规

格式: .setcoc 0-5

别名: 无

可用范围: 群内

序号 规则 0[默认] 出1大成功,不满50出96-100大失败,满50出100大失败(COC7规则书) 1 不满50出1大成功,不满50出96-100大失败,满50出100大失败 2[常用] 出1-5且判定成功为大成功,出96-100且判定失败为大失败 3 出1-5大成功,出96-100大失败(即大成功/大失败时无视判定结果) 4 出1-5且≤(成功率/10)为大成功,不满50出>=96+(成功率/10)为大失败,满50出100大失败 5 出1-2且≤(成功率/5)为大成功,不满50出96-100大失败,满50出99-100大失败 dg 出1或检定成功基础上个位十位相同为大成功,出100或检定失败基础上个位十位相同为大失败,此规则无困难成功或极难成功 .ti 抽取临时性疯狂症状

格式: .ti

别名: 无

可用范围: 群内

1234.ti的疯狂发作-即时症状:1D10=8竭嘶底里:调查员表现出大笑,哭泣,嘶吼,害怕等的极端情绪表现,持续 1D10=10 轮。 .li 抽取总结性疯狂症状

格式: .li

别名: 无

可用范围: 群内

1234.li的疯狂发作-总结症状:1D10=8逃避行为:调查员恢复清醒时发现自己在很远的地方,也许迷失在荒郊野岭,或是在驶向远方的列车或长途汽车上。 扩展: dnd5e

注: 使用dnd5e指令可能需要先开启dnd5e扩展,或直接使用.set dnd变更游戏模式。

.dnd 制卡指令

格式: .dnd () // 制卡指令,返回组人物属性,最高为10次

格式: .dndx () // 制卡指令,但带有属性名,最高为10次

别名: 无

可用范围: 群内、私聊

自由分配模式:

123456789.dnd 5Dice:的DnD5e人物作成(自由分配模式):[16, 16, 14, 11, 10, 9] = 76[16, 15, 15, 12, 9, 9] = 76[16, 15, 14, 13, 13, 12] = 83[18, 17, 15, 14, 13, 8] = 85[15, 14, 13, 13, 10, 8] = 73获取带属性名的预设请用.dndx

预设模式:

12345678.dndx 5的DnD5e人物作成(预设模式):力量:16 体质:9 敏捷:14 智力:10 感知:13 魅力:10 共计:72力量:13 体质:12 敏捷:8 智力:8 感知:14 魅力:9 共计:64力量:16 体质:10 敏捷:11 智力:14 感知:12 魅力:10 共计:73力量:9 体质:17 敏捷:15 智力:9 感知:10 魅力:13 共计:73力量:12 体质:6 敏捷:8 智力:13 感知:10 魅力:8 共计:57自由分配模式请用.dnd .ri 先攻设置

格式: .ri // 角色名省略为当前角色

格式: .ri +2 // 先攻值格式1,解析为D20+2

格式: .ri 12 // 先攻值格式2,解析为12

格式: .ri =D20+3 // 先攻值格式3,解析为D20+3

格式: .ri , , ... // 允许连写,逗号分隔

别名: 无

可用范围: 群内

先攻

12345678910111213141516// 单独设置.ri +2 // 为自己设定.ri +3 狗头人1 // D20加值方式.ri =D20+2 狗头人1 // 表达式方式.ri 30 狗头人1 // 数值方式// 批量设置.ri +2 狗头人1, 3 狗头人2, =d30 狗头人3 +3Dice:先攻点数设置: 1. 狗头人1: 10[1d20=10] + 2=12 2. 狗头人2: 3 3. 狗头人3: 1 4. 木落: 1[1d20=1] + 3=4 .init 先攻列表

格式: .init // 查看先攻列表

格式: .init del ... // 从先攻列表中删除

格式: .init set // 设置单位的先攻

格式: .init clr // 清除先攻列表

格式: .init help // 显示本帮助

别名: 无

可用范围: 群内

123456789101112131415// 设置先攻.ri +2 狗头人1, 4 狗头人2, 12 木落Dice:先攻点数设置: 1. 狗头人1: 8[1d20=8] + 2=10 2. 狗头人2: 4 3. 木落: 12// 查看列表.initDice:当前先攻列表为: 1. 木落: 12 2. 狗头人2: 10 3. 狗头人1: 4 .st DND属性设置

格式: .st 模板 // 录卡模板

格式: .st show // 展示个人属性

格式: .st show ... // 展示特定的属性数值

格式: .st show // 展示高于的属性,如.st show 30

格式: .st clr/clear // 清除属性

格式: .st del ... // 删除属性,可多项,以空格间隔

格式: .st export // 导出,包括属性和法术位

格式: .st help // 帮助

格式: .st : // 设置属性,技能加值会自动计算。例:.st 感知:20 洞悉:3

格式: .st ± // 例:.st 生命+1d4

格式: .st hp-1d6 --over // 不计算临时生命扣血

别名: .dst

可用范围: 群内

DND的录卡,和属性操作指令。

这个指令最好在关闭COC扩展时使用,如果一起用,可以使用.dst来规避指令冲突。

目前支持技能调整值的自动计算,包括属性带来的加值,和熟练带来的加值。

使用模板录卡:

123456789101112// 查看模板.st 模板Dice:人物卡模板(第二行文本):.dst 力量:10 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0注意: 技能只填写修正值即可,属性调整值会自动计算。熟练写为“运动*:0”// 录卡.st 力量:12 体质:10 敏捷:10 智力:10 感知:10 魅力:10 hp:10 hpmax: 10 熟练:2 运动*:3 特技:1 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0Dice:的dnd5e人物属性设置如下:读入: 力量:12, 体质:10, 敏捷:10, 智力:10, 感知:10, 魅力:10, hp:10, hpmax:10, 熟练:2, 运动:3[技能, 熟练], 特技:1[技能], 巧手:0[技能], 隐匿:0[技能], 调查:0[技能], 奥秘:0[技能], 历史:0[技能], 自然:0[技能], 宗教:0[技能], 察觉:0[技能], 洞悉:0[技能], 驯养:0[技能], 医疗:0[技能], 生存:0[技能], 说服:0[技能], 欺诈:0[技能], 威吓:0[技能], 表演:0[技能]

查看

123456789101112.st show // 查看属性的个人属性为:力量: 12 敏捷: 10 体质: 10 智力: 10 感知: 10 魅力: 10 hp: 10 hpmax: 10 EXP: 0 熟练: 2 特技: 1[基础值1] 运动: 6[基础值3] ... // 还有一堆 这里不写了// 如果想查看部分,使用.st show 力量 运动 熟练的个人属性为:力量: 12 熟练: 2 运动: 6[基础值3]

修改属性

1234.st 力量 + 2Dice:人物属性设置如下:修改: 力量(12 ➯ 14)

属性修改后,属性调整值会自动变更。不用再行关注。

退游小技巧,黑暗录卡:

1.st 力量:4d6k3 体质:4d6k3 敏捷:4d6k3 智力:4d6k3 感知:4d6k3 魅力:4d6k3 hp:10 hpmax: 10 熟练:2 运动:0 特技:0 巧手:0 隐匿:0 调查:0 奥秘:0 历史:0 自然:0 宗教:0 察觉:0 洞悉:0 驯养:0 医疗:0 生存:0 说服:0 欺诈:0 威吓:0 表演:0

对生命值的特殊支持:

当存在临时生命(buff血量),自动优先消耗。若临时生命不足以抵挡伤害,剩余会扣减血量 当生命值归零,若伤害大于等于血量上限,判定人物死亡 当生命值归零,若伤害小于血量上限,人物昏迷 当人物已经昏迷,不足致死的伤害自动折算为死亡豁免失败

一次性进行多个修改:

123456.st hp-3 hp-3 hp-3的dnd5e人物属性设置如下:修改: hp(2 ➯ 0), hp(0 ➯ 0), hp(0 ➯ 0)遭受了1点过量伤害,生命值降至0,陷入了昏迷!在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1!在昏迷状态下遭受了3点过量伤害,死亡豁免失败+1!

此外,这个指令可以通过@来选定其他人(仅限一名),调整对方的属性。

特别注意:**.st clr会同时清除法术位**

.rc DND检定

格式: .rc // .rc 力量

格式: .rc 豁免 // .rc 力量豁免

格式: .rc // .rc 力量+3

格式: .rc 优势 // .rc 优势 力量+4

格式: .rc 劣势 (原因) // .rc 劣势 力量+4 推一下试试

格式: .rc @某人 // 对某人做检定

别名: .drc

可用范围: 群内

示例

1234.rc 运动Dice:的“运动”检定结果为:8[1d20=8] + 6[运动=6] = 14

优势检定和劣势检定

1234.rc 优势 力量+4Dice:的“力量+4”检定结果为:17[{17 | 11 }] + 12[力量=12] + 4 = 33

带原因的检定:

1234.rc 劣势 力量+4 推一下试试Dice:的“推一下试试”检定结果为:17[{17 | 18 }] + 12[力量=12] + 4 = 33

此外,这个指令可以通过@来选定其他人(仅限一名)操作。

奇妙运用

你可以通过如下方式记录武器的熟练项。.st 长剑=熟练加值(数字).rc 长剑

1234567.st长剑=4Dice:的属性录入完成,本次录入了1条数据。.rc 长剑Dice:的“长剑”检定(dnd5e)结果为:16[1d20=16] + 4[长剑=4] = 20 .buff DND临时属性

格式: .buff // 展示当前buff

格式: .buff clr // 清除buff

格式: .buff del ... // 删除属性,可多项,以空格间隔

格式: .buff help // 帮助

格式: .buff : // 设置buff属性,例:.buff 力量:4 奥秘*:0,奥秘临时熟练加成

格式: .buff ± // 修改属性,例:.buff hp+1d4

格式: .buff ± @某人 // 修改他人buff属性,例:.buff hp+1d4

别名: .dbuff

可用范围: 群内

目前这个指令的行为和st指令基本一致。

用于设置临时属性,例如虚假生命:

123456789.st hp:10.buff hp : 1d4+4Dice:人物Buff属性设置如下:读入: hp:5.st show hphp: 16[10]

也可以用来设置其他属性:

1234567.st 力量:10 运动:0.buff 力量:6.st show 力量 运动Dice:的个人属性为:力量: 16[10] 运动: 3[0]

临时的技能熟练(装备或法术效果):

1234567.st 力量:10 运动:0 熟练:3.buff 运动*:0.st show 力量 运动Dice:的个人属性为:力量: 16[10] 运动: 6[0]

删除和清空

12345.buff del hpDice: 的如下buff属性被成功删除:hp,失败0项.buff clrDice: 的BUFF数据已经清除,共计0条

此外,这个指令可以通过@来选定其他人(仅限一名)操作。

.ss 法术位(spell slots)

格式: .ss // 查看当前法术位状况

格式: .ss init 4 3 2 // 设置1 2 3环的法术位上限,以此类推到9环

格式: .ss set 2环 4 // 单独设置某一环的法术位上限,可连写多组,逗号分隔

格式: .ss clr // 清除法术位设置

格式: .ss rest // 恢复所有法术位(不回复hp)

格式: .ss 3环 +1 // 增加一个3环法术位(不会超过上限)

格式: .ss lv3 +1 // 增加一个3环法术位 - 另一种写法

格式: .ss 3环 -1 // 消耗一个3环法术位,也可以用.cast 3

别名: .法术位 .dss

可用范围: 群内

1234567891011121314.ss init 3 4 5为设置法术位: 1环3个, 2环4个, 3环5个.ss 1环 -1的1环法术位消耗至2个,上限3个.ssDice: 的法术位状况: 1环:2/3, 2环:4/4, 3环:5/5.ss restDice: 的法术位已经完全恢复.ss set 4环 3Dice: 为设置法术位: 4环3个

此外,这个指令可以通过@来选定其他人(仅限一名)操作。

特别注意:**.st clr会同时清除法术位**

.cast 使用法术位

格式: .cast 1 // 消耗1个1环法术位

格式: .cast 1 2 // 消耗2个1环法术位

别名: .dcast

可用范围: 群内

12.cast 2 // 或者写2环也是可以的Dice: 的2环法术位消耗至3个,上限4个

此外,这个指令可以通过@来选定其他人(仅限一名)操作。

.longrest / .长休

格式: .长休 // 恢复生命值(必须设置hpmax且hp>0)和法术位

格式: .longrest // 另一种写法别名: .dcast

可用范围: 群内

有hpmax,有法术位的情况:

12.长休Dice: 的长休: hp得到了恢复,现为12 法术位得到了恢复

两个都没有的情况:

12.长休的长休: 没有设置hpmax,无法回复hp

此外,这个指令可以通过@来选定其他人(仅限一名)操作。

.ds / .死亡豁免

格式: .死亡豁免 // 恢复生命值(必须设置hpmax且hp>0)和法术位

格式: .ds // 别名

格式: .ds +1d4 // 检定时添加1d4的加值

格式: .ds 成功±1 // 死亡豁免成功±1,可简写为.ds s±1

格式: .ds 失败±1 // 死亡豁免失败±1,可简写为.ds f±1

格式: .ds stat // 查看当前死亡豁免情况

格式: .ds help // 查看帮助

可用范围: 群内

注意,st指令对hp的操作也会自动触发死亡豁免。

1234.st hp:3 hpmax:12Dice:的dnd5e人物属性设置如下:读入: hp:3, hpmax:12

陷入昏迷:

1234.st hp-10的dnd5e人物属性设置如下:修改: hp(3 ➯ 0)遭受了7点过量伤害,生命值降至0,陷入了昏迷!

昏迷后被攻击:

123的dnd5e人物属性设置如下:修改: hp(0 ➯ 0)在昏迷状态下遭受了1点过量伤害,死亡豁免失败+1!

死亡:

12的死亡豁免检定: [1d20=3]=3 有些不妙!死亡豁免失败+1你获得了3次死亡豁免检定失败,不幸去世了!

医学奇迹:

1的死亡豁免检定: [1d20=20]=20 你觉得你还可以抢救一下!HP回复1点!

此外,这个指令可以通过@来选定其他人(仅限一名)操作。

扩展: 故事模块.name 随机名字

格式: .name cn/en/jp // 抽取随机名字

格式: .name cn 10 // 指定抽取数量

可用范围: 群内、私聊

1234567891011.name cnDice: 为生成以下名字:乌天雪、孟微微、香佳宁、岩章联、宓永玲.name enDice: 为生成以下名字:Jayce Jenkins (杰斯·詹金斯)、Marie Abshire (玛丽·阿布希尔)、Delaney Thompson (德莱尼·汤普森)、Leora Yundt (莱奥拉·杨特)、Vallie Padberg (瓦利·帕德贝格).name jpDice: 为生成以下名字:宮原 笑和(みやはら えみな)、林 勝利(はやし しょうり)、福本 衣宮(ふくもと いく)、石黒 翠紀(いしぐろ みのり)、宮原 梓生(みやはら しき) .namednd 随机DND名字

格式: .name 达马拉人/卡林珊人/莱瑟曼人/受国人/精灵/矮人/兽人/海族/地精 // 抽取随机名字

格式: .name 达马拉人 10 // 指定抽取数量

可用范围: 群内、私聊

123.namednd 精灵 3Dice: 为生成以下名字:Wysalana Sunbrand (维萨拉那·炙痕)、Keyfina Sunhawk (凯菲娜·炎鹰)、Olakrana Dawnstar (奥拉克拉纳·晨星) .who 顺序重排

格式: .who a b c // 重新排序

可用范围: 群内、私聊

.modu 魔都模组查询

格式:.modu search () // 搜索关键字

格式:.modu rec () // 搜索编辑推荐

格式:.modu author () // 搜索指定作者

格式:.modu luck () // 查看编辑推荐

格式:.modu get // 查看指定详情

格式:.modu roll // 随机抽取

格式:.modu help // 显示帮助

别名: .cnmods

可用范围: 群内、私聊

扩展: 日志.log 跑团日志

格式: .log new/on/off/end/get/halt/list/del/stat

别名: 无

可用范围: 群内

.log new () // 新建日志并开始记录

.log on () // 开始记录,日志名不写则为最近一次日志

.log off // 暂停记录

.log end // 完成记录并发送日志文件

.log get // 重新上传日志,并获取链接

.log halt // 关闭当前记录,不发送日志文件

.log list // 查看当前群的日志列表

.log del // 删除一份日志

.log stat // 查看统计

.log masterget // 重新上传日志,并获取链接(无法取得日志时,找骰主做这个操作)

特别提醒:海豹核心的日志记录,会在bot off时自动停止。

骰主代取LOG

比如说有一个团,群已经解散了,这时候有人找你来帮忙取log,骰主可以这样操作:

首先,找到任意交互界面,可以是海豹后台的指令测试界面(你要将UI:1001添加为骰主),然后执行下面的命令

1234567.log list QQ-Group:12345 // 至少要知道群号Dice:正在列出存在于此群的记录:- test- 测试- 测试2

接下来再做一步:

1.log masterget QQ-Group:12345 测试

就可以了。

.ob 观众

格式: .ob // 成为观众

格式: .ob exit // 取消观众身份

可用范围: 群内、私聊

没有什么实际作用,只是修改PC名字和群名片(如果有权限)

.sn 自动跑团名片

格式: .sn coc // COC名片

格式: .sn dnd // DND名片

格式: .sn none // 空名片

格式: .sn off // 关闭自动名片

可用范围: 群内、私聊

当骰子是管理员或群主时,通过这个指令,能够自动为非管理/群主设置群名片。

COC名片:角色名 SAN70 HP14/14 DEX60

DND名片:角色名 HP10/10 AC8 DC6 PW8

.stat/.hiy 统计

格式: .stat log // 查看当前日志的统计

可用范围: 群内、私聊

海豹不支持.hiy来查询你使用这个骰子的所有检定的成功率。

扩展: 娱乐.jrrp 今日人品

格式: .jrrp

别名: 无

可用范围: 群内、私聊

12.jrrpDice: 的今日人品为68 .gugu 人工智能鸽子

格式: .gugu

别名: .咕咕

可用范围: 群内、私聊

12.guguDice: 🕊️:今天发版本,领导说发不完不让走

P.S. 灵感来自于狗头人网站的同名功能,测试版本中有部分语料来自此网站,但是由于一直联系不上网站作者,无法拿到授权,所以在正式版本时将会全部替换。

.rsr 暗影狂奔骰点

格式: .rsr

别名: 无

可用范围: 群内、私聊

每个被骰出的五或六就称之为一个成功度如果超过半数的骰子投出了一被称之为失误在投出失误的同时没能骰出至少一个成功度被称之为严重失误

123.rsr 20骰点20D6:成功度:9/5 .dx/dxh 双重十字骰点

格式: .dx

格式: .dx 3c7

别名: 无

可用范围: 群内、私聊

12.dx 3掷出了 3c10=[出目8/3 {1,7,8}]=8

建议使用 .r 3c10 替代

.w/ww/wwh 双重十字骰点

格式: .ww

格式: .ww 10a10

别名: 无

可用范围: 群内、私聊

12.ww 7掷出了 7a10=[成功4/9 轮数:3 {9*,2,4,2,3,1,},{},{8*}]=4 .ek 共鸣性怪异检定

格式:.ek (+) 判定值

格式:.ek 检索 // 骰“检索”等级个d10,计算成功数

格式:.ek 检索+2 // 在上一条基础上加骰2个d10

格式:.ek 检索 6 // 骰“检索”等级个d10,计算小于6的骰个数

格式:.ek 检索 知力+检索 // 骰”检索“,判定线为”知力+检索“

格式:.ek 5 4 // 骰5个d10,判定值4

格式:.ek 检索2 // 未录卡情况下判定2级检索

格式:.ek 共鸣 6 // 共鸣判定,成功后手动st共鸣+N

别名: 无

可用范围: 群内、私聊

123456.st 检索3 知力4.ek 检索的“检索”共鸣性怪异规则检定:{3+2+4}判定值: 7{3 + 4[知力=4]}成功数: 3[极限成功] .ekgen 共鸣性怪异角色制成

格式: .ekgen

别名: 无

可用范围: 群内、私聊

123.ekgen的共鸣性怪异人物做成:身体:6 灵巧:2 精神:6 五感:3 知力:3 魅力:1 社会:4 运势:2 hp:16 mp:9 .text 自定义文本命令

格式: .text

别名: 无

可用范围: 群内、私聊

这个命令的使用方式很简单:

12.text Hello World!Dice: Hello World!

它支持变量,比如有一些内置变量(角色属性也是变量):

12.text Hello {$t玩家},你的理智属性为{san}Dice: Hello ,你的理智属性为50

还可以做赋值操作,例如

12.text 你直面了未知。扣除理智{$tSan=1d10},理智变化: {san} ➯ {san=san-$tSan}Dice: 你直面了未知。扣除理智5,理智变化: 50 ➯ 45

一个较为复杂的例子,coc7角色做成:

123.text 力量:{$t1=3d6*5} 敏捷:{$t2=3d6*5} 意志:{$t3=3d6*5} 体质:{$t4=3d6*5} 外貌:{$t5=3d6*5} 教育:{$t6=(2d6+6)*5} 体型:{$t7=(2d6+6)*5} 智力:{$t8=(2d6+6)*5} 幸运:{$t9=3d6*5} 生命值:{($t4+$t7)/10} 总数:{$t1+$t2+$t3+$t4+$t5+$t6+$t7+$t8}Dice: 力量:40 敏捷:65 意志:60 体质:55 外貌:30 教育:65 体型:50 智力:40 幸运:30 生命值:10 总数:405注: .coc命令内部也是如此实现

你可能注意到了有的变量带$t前缀,这是“临时变量”的意思。

想了解更多关于变量,见“变量机制”一节。

扩展: 牌堆.draw抽牌指令

格式: .draw help // 显示本帮助

格式: .draw list // 查看载入的牌堆文件

格式: .draw keys // 查看可抽取的牌组列表(容易很长,不建议用)

格式: .draw keys // 查看特定牌堆可抽取的牌组列表

格式: .draw search // 搜索相关牌组

格式: .draw desc // 查看某牌组详细信息

格式: .draw // 进行抽牌

格式: .draw reload // 重新加载牌堆,仅master可用

别名: .deck

可用范围: 群内、私聊

扩展: 自定义回复

海豹核心提供了强大的自定义回复功能。

支持关键字的精确、模糊、正则、前缀、后缀匹配方式,同时可以进行条件组合。

对于回复方式则支持普通回复、私聊回复、群聊回复,后两者的典型组合方式就是暗骰(群聊回复一句提示发言,并私聊回复骰点结果)。

.reply 自定义回复

格式: .reply on // 开启

格式: .reply off // 关闭

可用范围: 群内、私聊

此指令仅用于开关。

录入文本请在GUI界面进行。

案例:前缀+后缀,匹配AxxxxxxxB类型文本

应用案例:随机看图

应用案例:单人模组

具体实现,第一段

第二段

这两段较为常规,第三段开始变形了!

123456789101112{% if $mStory == 4 { $mStory = 5 }; if $mStory == 3 { $mStory = 4 }; if $mStory == 2 { $mStory = 3 }; $mStory == 3 ? '这个村子有一户人家,门前有两棵树', $mStory == 4 ? '一棵是函树,一棵是反函树', $mStory == 5 ? '我讲完了。', 1 ? '?'%}{% if $mStory == 5 { $mStory=0 } %}

匹配条件

自定义脚本指令

用户可通过自定义回复实现组合掷骰,例如手册中,text写的coc属性投掷部分,可以通过复制进自定义回复后,设置关键词的方式实现自定义指令。执行效果如下:

123自定义Dice:力量:55敏捷:60意志:45体质:60外貌:50教育:50体型:55智力:60幸运:60生命值:11总数:435 自定义文本

SealDice可以对骰子进行几乎完全的自定义,绝大部分指令的文本都可以进行修改。

同时还支持插入图片和CQ码。

界面概览

一图胜千言:

这是SealDice的自定义文案界面,左侧是分类:

右侧是具体的文本,我们以“大成功”文本来举例:

这里有两行文本,骰子会随机抽取其中的一行文本来使用。例如:

12345.ra 力量Dice: 的力量检定结果为:D100=3/30=([1d100=3]) 大成功!.ra 力量Dice: 的力量检定结果为:D100=2/30=([1d100=3]) 运气不错,大成功!11111

如果想要添加一行,那么点击左侧加号按钮:

如果你觉得某一行不满意,点左侧删除按钮。

最后,如果你想回到初始设置,点击右上角的刷子图标。

随后会弹出确认框,点击确定后,一切就是刚开始的样子了。

此时,刷子图标也会消失。

当然,修改好之后,不要忘记保存!!注意保存前不要切换左侧的分类!

骰子进群和成为好友的问候语

这两个词条:

核心:骰子进群

核心:骰子成为好友

插入图片和CQ码

将图片放在骰子的适当目录(建议放在data/images),再写这样一句话即可:

[图:data/images/sealdice.png]

例如骰子进群的文本:

全文本为:

1 已经就绪。可通过.help查看指令列表\n[图:data/images/sealdice.png]

效果如下:

变量标签

你可能注意到,有些词条下面有这样的内容:

文本下方的标签代表了被默认文本所使用的特殊变量,你可以使用 {变量名} 来插入他们,例如 {$t判定值}

除此之外,有些变量可以在所有文本中使用,具体列表可以见下方“变量机制”一节。

以及,所有的自定义文本都可以嵌套使用,例如:

1这里是{核心:骰子名字},我是一个示例

默认会被解析为:

1这里是海豹,我是一个示例

注意!千万不要递归嵌套,会发生很糟糕的事情。

辅助机制属性同义词

例如在COC录卡的时候,有这样的指令:

12.st 力量50str50Dice: 的属性录入完成,本次共记录了2条数据 (其中1条为同义词)

很显然力量和str是同一个属性,所以只会录入一条属性。

12.st showDice: 的个人属性为:力量: 50

同理,在.ra判定以及其他场景中,力量和str也一样会当作同一个值处理。

此外,同义词大小写不敏感。sTR视同str

同义词表遵循以下原则(以CO7为例):

中文和英文缩写等价,如力量和str 同一概念的不同常用称呼,如san san值 理智 理智值 易混词汇,如侦查 侦察 不同版本翻译区别,如COC6版和7版话术 快速交谈 简繁区别,如体质 體質 *少量游戏性等值属性,如枪械 射击,智力 灵感,教育 知识

COC7同义词具体内容如下:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107{ "理智": {"san", "san值", "理智值", "理智点数", "心智", "心智点数", "心智點數", "理智點數"}, "力量": {"str"}, "体质": {"con", "體質"}, "体型": {"siz", "體型", "体型", "体形", "體形"}, "敏捷": {"dex"}, "外貌": {"app", "外表"}, "意志": {"pow"}, "教育": {"edu", "知识", "知識"}, // 教育和知识等值而不是一回事,注意 "智力": {"int", "灵感", "靈感"}, // 智力和灵感等值而不是一回事,注意 "幸运": {"luck", "幸运值", "运气", "幸運", "運氣", "幸運值"}, "生命值": {"hp", "生命", "体力", "體力", "血量", "耐久值"}, "魔法值": {"mp", "魔法", "魔力", "魔力值"}, "护甲": {"装甲", "護甲", "裝甲"}, "枪械": {"火器", "射击", "槍械", "射擊"}, "会计": {"會計"}, "人类学": {"人類學"}, "估价": {"估價"}, "考古学": {"考古學"}, "魅惑": {"取悦", "取悅"}, "攀爬": {"攀岩", "攀登"}, "计算机使用": {"电脑使用", "計算機使用", "電腦使用", "计算机", "电脑", "計算機", "電腦"}, "信用评级": {"信誉", "信用", "信誉度", "cr", "信用評級", "信譽", "信譽度"}, "克苏鲁神话": {"cm", "克苏鲁", "克苏鲁神话知识", "克蘇魯", "克蘇魯神話", "克蘇魯神話知識"}, "乔装": {"喬裝"}, "闪避": {"閃避"}, "汽车驾驶": {"汽車駕駛", "汽车", "驾驶", "汽車", "駕駛"}, "电气维修": {"电器维修", "电工", "電氣維修", "電器維修", "電工"}, "电子学": {"電子學"}, "话术": {"快速交谈", "話術", "快速交談"}, "历史": {"歷史"}, "恐吓": {"恐嚇"}, "跳跃": {"跳躍"}, "母语": {"母語"}, "图书馆使用": {"圖書館使用", "图书馆", "图书馆利用", "圖書館", "圖書館利用"}, "聆听": {"聆聽"}, "锁匠": {"开锁", "撬锁", "钳工", "鎖匠", "鉗工", "開鎖", "撬鎖"}, "机械维修": {"机器维修", "机修", "機器維修", "機修"}, "医学": {"醫學"}, "博物学": {"自然", "自然学", "自然史", "自然學", "博物學"}, "领航": {"导航", "領航", "導航"}, "神秘学": {"神秘學"}, "操作重型机械": {"重型操作", "重型机械", "重型", "重机", "操作重型機械", "重型機械", "重機"}, "说服": {"辩论", "议价", "演讲", "說服", "辯論", "議價", "演講"}, "精神分析": {"心理分析"}, "心理学": {"心理學"}, "骑术": {"騎術"}, "妙手": {"藏匿", "盗窃", "盜竊"}, "侦查": {"侦察", "偵查", "偵察"}, "潜行": {"躲藏"}, "投掷": {"投擲"}, "追踪": {"跟踪", "追蹤", "跟蹤"}, "驯兽": {"动物驯养", "馴獸", "動物馴養"}, "读唇": {"唇语", "讀唇", "唇語"}, "炮术": {"炮術"}, "学识": {"学问", "學識", "學問"}, "艺术与手艺": {"艺术和手艺", "艺术", "手艺", "工艺", "技艺", "藝術與手藝", "藝術和手藝", "藝術", "手藝", "工藝", "技藝"}, "美术": {"美術"}, "伪造": {"偽造"}, "摄影": {"攝影"}, "理发": {"理髮"}, "书法": {"書法"}, "木匠": {"木工"}, "厨艺": {"烹饪", "廚藝", "烹飪"}, "写作": {"文学", "寫作", "文學"}, "歌剧歌唱": {"歌劇歌唱"}, "技术制图": {"技術製圖"}, "裁缝": {"裁縫"}, "声乐": {"聲樂"}, "喜剧": {"喜劇"}, "器乐": {"器樂"}, "速记": {"速記"}, "园艺": {"園藝"}, "斗殴": {"鬥毆"}, "剑": {"剑术", "劍", "劍術"}, "斧": {"斧头", "斧子", "斧頭"}, "链锯": {"电锯", "油锯", "鏈鋸", "電鋸", "油鋸"}, "链枷": {"连枷", "連枷", "鏈枷"}, "绞索": {"绞具", "絞索", "絞具"}, "手枪": {"手槍"}, "步枪": {"霰弹枪", "步霰", "步枪/霰弹枪", "散弹枪", "步槍", "霰彈槍", "步霰", "步槍/霰彈槍", "散彈槍"}, "弓": {"弓术", "弓箭", "弓術"}, "火焰喷射器": {"火焰噴射器"}, "机枪": {"機槍"}, "矛": {"投矛"}, "冲锋枪": {"衝鋒槍"}, "天文学": {"天文學"}, "生物学": {"生物學"}, "植物学": {"植物學"}, "化学": {"化學"}, "密码学": {"密碼學"}, "工程学": {"工程學"}, "司法科学": {"司法科學"}, "地质学": {"地理学", "地質學", "地理學"}, "数学": {"數學"}, "气象学": {"氣象學"}, "药学": {"藥學"}, "物理学": {"物理", "物理學"}, "动物学": {"動物學"}, "船": {"开船", "驾驶船", "開船", "駕駛船"}, "飞行器": {"开飞行器", "驾驶飞行器", "飛行器", "開飛行器", "駕駛飛行器"}, "科学": {"科學"}, "海洋": {"海上"}, "极地": {"極地"}, "语言": {"外语", "語言", "外語"},}

同义词列表可以在骰子运行后,查看骰子目录下data/default/extensions/coc7/attribute.yaml

DND同义词列表:

123456789101112131415161718192021222324252627282930313233343536373839404142{ "力量": {"str", "Strength"}, "敏捷": {"dex", "Dexterity"}, "体质": {"con", "Constitution", "體質"}, "智力": {"int", "Intelligence"}, "感知": {"wis", "Wisdom"}, "魅力": {"cha", "Charisma"}, "ac": {"AC", "护甲等级", "护甲值", "护甲", "護甲等級", "護甲值", "護甲", "装甲", "裝甲"}, "hp": {"HP", "生命值", "生命", "血量", "体力", "體力", "耐久值"}, "hpmax": {"HPMAX", "生命值上限", "生命上限", "血量上限", "耐久上限"}, "dc": {"DC", "难度等级", "法术豁免", "難度等級", "法術豁免"}, "hd": {"HD", "生命骰"}, "pp": {"PP", "被动察觉", "被动感知", "被動察覺", "被动感知"}, "熟练": {"熟练加值", "熟練", "熟練加值"}, "体型": {"siz", "size", "體型", "体型", "体形", "體形"}, // 技能 "运动": {"Athletics", "運動"}, "体操": {"Acrobatics", "杂技", "特技", "體操", "雜技"}, "巧手": {"Sleight of Hand"}, "隐匿": {"Stealth", "隱匿", "潜行", "潛行"}, "调查": {"Investigation", "調查"}, "奥秘": {"Arcana", "奧秘"}, "历史": {"History", "歷史"}, "自然": {"Nature"}, "宗教": {"Religion"}, "察觉": {"Perception", "察覺", "觉察", "覺察"}, "洞悉": {"Insight", "洞察"}, "驯兽": {"Animal Handling", "馴獸", "驯养", "馴養"}, "医药": {"Medicine", "醫藥", "医疗", "醫療"}, "求生": {"Survival", " 生存"}, "游说": {"Persuasion", "说服", "话术", "遊說", "說服", "話術"}, "欺瞒": {"Deception", "唬骗", "欺诈", "欺骗", "诈骗", "欺瞞", "唬騙", "欺詐", "欺騙", "詐騙"}, "威吓": {"Intimidation", "恐吓", "威嚇", "恐嚇"}, "表演": {"Performance"},}

目前不可自定义。如有建议欢迎反馈。

变量机制

你可能注意到,这里出现了一些san 、$t玩家之类的东西,这些是SealDice中的变量。

内置变量有:

变量名 内容 示例结果 $t玩家 当前人物卡的名字,如果不存在则为群昵称或QQ昵称。 $t玩家_RAW 同上,但没有 木落 $tQQ昵称 QQ昵称 $t账号ID 海豹格式的ID QQ:123456789 $t账号ID_RAW 原始格式的ID 123456789 $tQQ QQ号 123456789 $t群名 群名 海豹核心·SealDice用户群 $t群号 海豹格式的ID QQ-Group:987654321 $t群号_RAW 原始格式的ID 987654321 $t个人骰子面数 个人骰子面数 100 $tDate 数字格式的现日期 20230109 $tYear 数字格式的年份 2023 $tMonth 数字格式的现月份 1 $tDay 数字格式的现日期 9 $tWeekday 数字格式的星期(1-7) 1 $tHour 数字格式的现时间(小时) 15 $tMinute 数字格式的现时间(分钟) 41 $tSecond 数字格式的现时间(秒) 55 $tTimestamp 数字格式的10位时间戳 1673250115 $t文本长度 触发消息的文本,汉字长度为3,英文字母和数字长度为1。 6 $t平台 触发的平台 QQ $t游戏模式 随.set coc/dnd改变 coc7 $t消息类型 触发位置为群还是私聊。(group/private) group 娱乐:今日人品 自定义文案 的今日人品为0 常量:APPNAME 软件名 SealDice 常量:VERSION 版本号 0.91测试版 v20220228 $tMsgID 消息ID,仅自定义回复中可用。 -123

变量的名称可以是汉字、字母和数字,$t是一个特殊的变量前缀。

*注: 所有自定义文案均为可用变量。

变量名字 用途 举例 普通名字 玩家的角色属性 理智、力量、智力 $t开头 个人临时变量,不存数据库 $t随机点数 $m开头 个人变量,跨群存在 $m今日人品 $g开头 群变量,群内所有人共享 $g群主体重

所有变量均可以在.rx / .rxh / .ra/.text等指令中、以及在自定义文案(text-template.yaml)中使用

如果一部分变量无效,请检查海豹是否为最新版本。

附录:常用变量名表

$t判定结果 // 大成功 成功 失败$t判定值$t增量$t新值$t旧值$t变化量$t表达式文本$t数量$t失败数量$t成功数量$t属性$t结果文本$t计算过程

内置脚本语言语法变量机制

见上方 辅助机制-变量机制 一节

数据类型和赋值语句12345678910111213141516// 文本类型 1$t0 >= 1$t0 == 1$t0 != 1$t0 < 1$t0 = 40 ? '如果灵视达到40以上,你就能看到这句话'

可以用这个指令测试,下同:

12.st 灵视41.text {灵视 >= 40 ? '如果灵视达到40以上,你就能看到这句话'} 多重条件算符 (? ,)1234灵视 >= 80 ? '看得很清楚吗?',灵视 >= 50 ? '不错,再靠近一点……',灵视 >= 30 ? '仔细听……',灵视 >= 0 ? '呵,无知之人。'

应用举例,默认的jrrp

1234567{$t玩家} 今日人品为{$t人品},{% $t人品 > 95 ? '人品爆表!', $t人品 > 80 ? '运气还不错!', $t人品 > 50 ? '人品还行吧', $t人品 > 10 ? '今天不太行', 1 ? '流年不利啊!'%} 三目运算符 (? :)1灵视 >= 40 ? '如果灵视达到40以上,你就能看到这句话' : '无知亦是幸运' 条件语句12345if $t0 > 10 { $t1 = "aaa"} else { $t1 = 'bbb'} 12实际测试:.text {% if $t0 > 10 { $t1="aaa"} else { $t1 = 'bbb' }; $t1 %} 如何使用(成为骰主)下载安装

首先下载对应系统的压缩包,例如我是Windows系统,选择sealdice-core_0.0.1_windows_amd64.zip。

解压后的目录是这样:

请务必完成解压后运行!千万不要在压缩包里双击!

双击运行sealdice-core.exe

请注意!!!建议使用Chrome或Edge浏览器,以保证WebUI功能的正常!!

Windows服务器系统请尤为注意,海豹并不支持IE浏览器!

登录平台账号

如果是windows系统,会直接弹出一个Web界面,也可以手动访问:

http://localhost:3211/

随后,点击左侧面板的“帐号设置”,再点击右边的蓝色加号添加一个账号:

输入完成后,点击下一步,根据提示照做即可。这里是需要手机QQ扫码:

如果你看到了“已连接”就说明成功了。

如果没来得及扫,也不要慌,点击“重新登录”,或者”删除“后重新添加帐号即可。

注意登录时不建议使用安卓以外的任何协议,因为极其容易失败,如果想要iOS或手表登录可以登录成功后再换协议。

如果遇到提示需要同WIFI扫码,请参见 [常见问题 - 在服务器上登录时说“需要在同一WIFI下扫码”怎么办](#> 在服务器上登录时说“需要在同一WIFI下扫码”怎么办)

若登录过程出现任何意料之外的结果,请刷新页面,将日志截图,加入企鹅群524364253将信息发送给我。

成功了之后就可以进行测试了。

骰子的大部分指令只在群内工作,请把骰子拉进群进行使用。

默认骰子进群时会自动开启并发送问候语,如果没有的话请执行@骰子 .bot on试试

Linux 部署一键方案

如果是首次部署,可以使用此命令一键安装,但注意以下几点:

脚本会在当前目录创建sealdice子目录,如果目录已经存在将直接失败 为了实现自启动,脚本会自动安装一个名为sealdice的systemd系统服务,请确保对systemd有基本的了解 端口为3211,如果端口被占用,会直接启动失败 部署第二只海豹时,仍需要手动部署 1curl -L https://sealdice.com/s/linux.sh | bash

如果一切正常,执行结果如下:

访问 http://ip地址:3211 即可进行使用。随系统自启动。

手动方案

下载解压海豹,在终端执行前,请先给文件加可执行权限:

1chmod +x ./sealdice-core

随后运行

1./sealdice-core

即可。余下的流程和Windows版本相同。

如果希望安装为系统服务,参考下面一节。

如果你使用SSH部署,不能访问http://localhost:3211,那么改为访问 http://ip地址:3211

Mac 部署

如果你是Mac系统,需要在终端运行SealDice。

注意:如果你是M1或更新的Apple Silicon芯片,那么需要安装Rosetta并使用x64版本

123# P.S. 目前有一个测试中的新方案,macOS一键安装!但是注意,此方案是群友编写,开发者并无硬件进行测试。# 打开终端(terminal),在其中粘贴,回车运行:curl -L https://sealdice.com/s/darwin.sh | bash

首先,下载并解压海豹,并在有sealdice-core文件的目录下,右键“新建位于文件夹位置的终端窗口”,随后执行下面两条指令。

如果没有这个选项,参考 https://www.cnblogs.com/huangshiyu13/p/14101284.html 进行设置。

将以下两条指令,逐条复制到终端中,回车运行(空格不能省略):

12chmod +x ./sealdice-core./sealdice-core

看到 => http server started on [::]:3221 就是启动成功了。

接下来使用浏览器访问 http://localhost:3211打开用户界面,余下的流程和Windows版本相同。

注意!如果二次启动海豹,最后还是右键打开终端窗口,然后运行指令中第二句(./sealdice-core)。直接双击运行可能会有权限不足的问题。

安装为系统服务 / 自启动

如果你使用远程Linux服务器部署,那么随着SSH终端关闭,通常海豹也会一块关闭。

SealDice提供了一种自动安装为系统服务(systemd服务项)的功能,可以免去手动配置:

123./sealdice-core -i正在安装系统服务,安装完成后,SealDice将自动随系统启动安装完成,正在启动……

卸载:

123./sealdice-core --uninstall正在卸载系统服务……系统服务已删除

服务名称和启动服务使用的用户名可以自定义,输入./sealdice-core -h自行查看

安装完成后,可以使用systemctl来管理服务:

1234systemctl status sealdicesystemctl start sealdicesystemctl stop sealdicejournalctl -xe -u sealdice.service // 查看日志

更多用法参见systemd文档

P.S. 如果你有自己的onebot服务端,请将其设为WS主动连接模式,手动修改data/default/serve.yaml即可进行连接。

在手机上运行(termux)

注意,这只是一个带有娱乐性质的临时方案。个人主要用这种办法来测试arm64平台兼容性。

不提供官方技术支持,还请大家量力而行。

步骤:

安装 termux

使用Google Play或其他市场,过程不赘述。

安装完成后打开。

复制这句话,粘贴后回车执行:

curl -L https://sealdice.com/s/ph.sh | bash如下图:

回车后看到一堆文本,碍于篇幅就不放上来了。

如果正确运行,最后一句话应该是:

=> http server started on [::]:3221

手机浏览器访问 127.0.0.1:3211

MOD和自定义牌堆

仓库:https://github.com/sealdice/draw

牌堆文件本质上是一个json文件,你可以参考json的格式使用,如果牌堆中需要调用图片等资源,你可以打包成zip后将后缀名改为.deck加载

自定义回复

仓库:https://github.com/sealdice/reply

其实写这篇教程的原因是,群文件里大佬的教程对一些人(比如笔者)来说太过高冷,后来跌跌撞撞地才学会了一点,我不想因为这些吓退他们,或者让他们觉得这很难……所以如果看到了熟悉的地方,请不要怀疑,没错,是我从大佬的教程上摘抄的……请不要忽视注意,注意中都是新手(笔者)常犯且犯过的错误,避免踩坑!总之,先感谢大佬的教程,让我们开始!

0.如何优雅的偷懒

.text将是你的一大助力。他会输出他后面的执行结果,这和自定义回复中的“回复”长得一模一样,因此你不必新建回复,设置触发,最后不厌其烦地输入触发词。你可以将他看成不需要触发词的自定义回复。

当然,在采用 .text 指令进行debug时,可能出现因为测试的内容对变量造成影响,而不得不频繁复制黏贴清空指令的情况。因此,在debug到烦的时候,相当建议专门开一个一两个字即可触发的自定义回复,用来节省你的剪贴板。

1.创建一个自定义回复

首先我们打开“自定义回复”一项,可以看到默认的reply.yaml应该是一片空白。让我们新建一项自定义回复。

2.触发条件

你应该可以看到,新建的自定义回复中分“条件”和“结果”两个部分。我们先说说条件。条件的最上方有一个“文本匹配”,点击他,展开下拉菜单,你可以发现还有“文本长度”和“表达式为真”两项,一共三项。我们接下来就按顺序,逐个讲解。条件可以有多个,但是必须同时满足,即“and”。海豹接收到以后就会返回你给定的内容。注意,在这里,是可以嵌入CQ码的,任何特殊消息类型都会被解析为CQ码。CQ码列表这里有些复杂,本人完全照搬(不是)大量借鉴了群友的描述:

当前版本的海豹提供如下几种匹配方式:

文本匹配-精确匹配-包含文本-不包含文本-模糊匹配-正则匹配-前缀匹配-后缀匹配 文本长度匹配-大于等于-小于等于 表达式为真

在这里,需要着重指出几处可能导致匹配结果不符合预期的情况:

模糊匹配中,是按照特殊算法进行匹配的,因此可能出现感觉能匹配上,实际上没办法匹配上的情况。如果想要某段文本出现就被回复,请使用包含文本匹配或正则匹配。 使用正则匹配时,直接在要匹配的文本一栏中写入正则表达式即可。正则表达式可以参照https://www.runoob.com/regexp/regexp-tutorial.html 在这里给出一个示例: ^测试(.+)吗$ 这一正则表达式将会匹配所有开头是 测试 而结尾是 吗 的回复,但中间如果存在换行则不匹配。如果没有 ^ $ 两个符号,则会是同时包含 测试 吗的任何发言。此乃贪婪匹配是也,所以请注意做好限定。 在文本长度匹配中,需要注意的是,一个汉字算作两个字符。如 你好 两字可以触发大于等于4的文本长度匹配。 在表达式为真匹配中,只需要直接在匹配文本中写出形如 变量名==需要的值 的形式即可,不需要使用任何 {} 。

正则匹配和精确匹配可能是自定义回复中使用最多的匹配。对于正则匹配而言,通过恰当的分组,可以做到将回复中的一部分存入变量中以备调用。

12345正则匹配:^购买(.+)输出文本:{$t玩家}购买了{$t1}购买猫粮Dice: 购买了猫粮

在一些官方教程中也有提到过,对于匹配到的自定义回复整条消息,会将其存入 $t0 ,而正则分组会存入 $t1 中。在如上例子中,就是将 购买 后用括号括起来的部分存入了 $t1 中,从而可以进行调用。如果有多组正则分组,则会按顺序存入 $t1 $t2 $t3 中。如果额外存在组名,如 (?Pcc) ,将会额外存入 $tA 。

在使用正则回复时请注意,由于 . 。 / ! 等符号会作为海豹中指令的前缀,因此作为前缀时可能导致将其识别为指令而非自定义回复的情况,建议换成别的前缀。

*注意:海豹支持用正则匹配CQ码,但是如果你这么做了,请在[]前面放反斜杠(\)转义。示例:^\[CQ:xxx,xx=xxx\]

3.返回结果(1)回复方式

你应该可以看到,结果一栏的左上角有一个默认为“回复”的下拉框。点击它,会展开三个回复方式。其中”回复“就是回复,而”私聊回复“可以做到类似暗骰的效果,“群内回复”则是在群里回复。

(2)高阶玩法

看到这里,你肯定想问:就这?没有更复杂一些的?没有能挑战自己的?别急,这就到了。在回复文本中,可以调用一些变量,也可以嵌入内置脚本语言。

调用变量

对海豹输入.text {$t玩家}进行测试返回则是进行测试(流溪是我的qq昵称/我在海豹那里。nn的名字)

嵌入脚本语言

.text {d100}输出的是掷一个d100的结果(只有数字)。详情见脚本语言。

变量赋值

所有变量在未被赋值时被调用的值都为0,而不是什么“空白”或者报错。一般来说,直接使用”变量=值”是最常用的。当然,变量也可以等于骰子算符。详细内容参见内置脚本语言。

*注意:如果用作判断(多用于if),则是”变量==值”。

执行块{% %}被称为执行块。

由{% %}括起来的部分会被作为代码执行,然后输出最后一个语句的结果。

如果想要输出字符串,则应该用反引号/双引号/单引号括上。(例:形如{% $t1="114514" %}的式子会输出114514)。另:若想在结果中调用变量,请用反引号。目前海豹只支持在反引号中调用变量。

执行块中的两个语句之间要使用分号(;)隔开。只要有一点点编程基础应该都能理解这个地方的语法。下面让我们看一个简单的示例:.text {% $t测试=1 %}这是一个最简单的示例。这里的第一句,也是最后一句,所以他的结果会作为“最后一句的结果”被输出。

if语法

if的使用很简单:if 条件 {结果}; if 条件 {结果} else {结果}这里举一个简单且有趣的例子:

1234567{% $t测试=1; if $t测试==1 {$t输出="赞美木落"}; if $t测试==2 {$t输出="快点更新"}; if $t测试!=2&&$t测试!=1 {$t输出="群主女装"} %} {$t输出}

(当然我为了看着方便进行了适当格式化)如果你可以看懂这段代码,你就可以出师了(笑)。看不懂也没关系,我们逐行解析:

首先,给$t测试赋值为1。然后进入if判断:1.如果$t测试等于1 则变量$t输出等于”赞美木落”;2.如果$t测试等于2 则变量$t输出等于”快点更新”;3.如果$t测试既不等于2也不等于1 则变量$t输出等于”群主女装”;3.最后,输出变量$t输出。(关于我为什么不用else,请看这里)在这个例子里,我们一开始就对$t测试进行了赋值为1,而且直到if前都没有变过,所以,$t输出就是”赞美木落”,而最终输出的也是这个。

接下来是一个简单的变量综合运算示例:

123456{% $t0=1; $tRand=d6; if $t0==1 {$t0=$t0+$tRand} %} {$t0}

在这个例子里,我们先给t0赋值为1,然后判断t0是否等于1,若通过则t0的值增加1d6,最后输出结果。这就像一种简单的编程语言,不是吗?

注意:

当形如:

123if xxx {xxx}; if xxx {xxx} else {xxx}

的式子出现以后,第二个if实质上是和else配对的,而不是if elseif elseif else的关系!即使满足了第一个if,其结果也是执行else中的内容!所以,如果将上文的if $t测试!=2&&$t测试!=1 {$t输出="群主女装"}更换为else {$t输出="群主女装"}的话,逻辑如下:1.判断第一个if,判断通过,$t测试被赋值”赞美木落”2.判断一对if……else,if不成立,所以运行else的结果,最终$t测试被赋值为”群主女装”。如果想实现if elseif elseif else的逻辑,有一种笨方法,像前文示例一样,用if xxx&&xxx {xxx}来代替。

(3)我们还有不足之处……目前已知的bug有:

1.形如xxx{{$t1=xx};{$t2=xx}}的回复会输出格式错误,但实际上已经执行了; 注:该问题已确认,会在未来版本进行修复,如果你发现了其他bug,欢迎在 https://github.com/sealdice/sealdice 中提交issue

(4)紧张刺激的实战例子!

1.养猫,撸它,随机反应(牌堆与自定义回复的结合)

12345678{% $mCatFavor { // 获取第一个参数,例如 .seal A B C // 这里 cmdArgs.getArgN(1) 的结果即是A,传参为2的话结果是B let val = cmdArgs.getArgN(1); switch (val) { case 'help': { // 命令为 .seal help // 创建一个结果对象,并将showHelp标记为true,这会自动给用户发送帮助 const ret = seal.ext.newCmdExecuteResult(true); ret.showHelp = true; return ret; } default: { // 命令为 .seal XXXX,取第一个参数为名字 if (!val) val = '氪豹'; // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复(听起来是废话文学,但详细区别见暗骰例子) seal.replyToSender(ctx, msg, `你抓到一只海豹!取名为${val}\n它的逃跑意愿为${Math.ceil(Math.random() * 100)}`); return seal.ext.newCmdExecuteResult(true); } }};

第三步,将命令注册到扩展中。

1ext.cmdMap['seal'] = cmdSeal;

如果你想要给这个命令起一个别称,也就是增加一个触发词,可以这样写:

12ext.cmdMap['seal'] = cmdSeal;//注册.seal指令ext.cmdMap['海豹'] = cmdSeal;//注册.海豹指令,等效于.seal

完整的代码如下:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// ==UserScript==// @name 示例:编写一条自定义指令// @author 木落// @version 1.0.0// @description 召唤一只海豹,可用.seal 命名// @timestamp 1671368035// 2022-12-18// @license Apache-2// @homepageURL https://github.com/sealdice/javascript// ==/UserScript==// 编写一条自定义指令// 先将扩展模块创建出来,如果已创建就直接使用let ext = seal.ext.find('test');if (!ext) { ext = seal.ext.new('test', '木落', '1.0.0'); seal.ext.register(ext);}// 创建指令 .seal// 这个命令的功能为,显示“抓到一只海豹的文案”// 如果命令写“.seal ABC”,那么文案中将海豹命名为“ABC”// 如果命令中没写名字,那么命名为默认值“氪豹”const cmdSeal = seal.ext.newCmdItemInfo();cmdSeal.name = 'seal'; // 指令名字,可用中文cmdSeal.help = '召唤一只海豹,可用.seal 命名';// 主函数,指令解析器会将指令信息解析,并储存在几个参数中// ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等// msg 为原生态的指令内容,如指令文本,发送平台,发送时间等// cmdArgs 为指令信息,会将用户发的信息进行分段,方便快速取用cmdSeal.solve = (ctx, msg, cmdArgs) => { // 获取第一个参数,例如 .seal A B C // 这里 cmdArgs.getArgN(1) 的结果即是A,传参为2的话结果是B let val = cmdArgs.getArgN(1); switch (val) { case 'help': { // 命令为 .seal help // 创建一个结果对象,并将showHelp标记为true,这会自动给用户发送帮助 const ret = seal.ext.newCmdExecuteResult(true); ret.showHelp = true; return ret; } default: { // 命令为 .seal XXXX,取第一个参数为名字 if (!val) val = '氪豹'; // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复(听起来是废话文学,但详细区别见暗骰例子) seal.replyToSender(ctx, msg, `你抓到一只海豹!取名为${val}\n它的逃跑意愿为${Math.ceil(Math.random() * 100)}`); return seal.ext.newCmdExecuteResult(true); } }}// 将命令注册到扩展中ext.cmdMap['seal'] = cmdSeal;// 无实际意义,用于消除编译报错export { }

这就是最基本的模板了。

5.进行随机

由于木落没有在示例中写这部分,我也不太清楚是不是这里有什么接口可以调用,如果后面有的话那就再补上。

这里就先摆一个随机整数的生成函数吧:

123456789/** * 生成随机整数 * @param min 最小值 * @param max 最大值 * @returns 位于[min,max]区间的随机整数 */function randomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min;} 6.抽取牌堆

原来还可以抽取牌堆吗?但目前开放的API里面找不到这个API,等待木落烤饼吧。

7.存取数据

相关的API是两个函数,ExtInfo.storageSet(key,value)函数和ExtInfo.storageGet(key),一个存,一个取。

关于key:

存储时需要指定key,你可以设定为你的扩展的名字,也可以设定为其他的,注意不要和别的扩展的key重名就可以了。

就好比你在商场门口想要把随身物品存进暂存柜中,需要先找到个和别人不重复的柜子,避免放错地方或者取错东西。

关于value:

存放的数据是字符串类型,且只能存一个,但如果想要存放更多的数据以及非字符串类型的数据怎么办?

答案是使用JSON.stringify()函数将存储了数据的JS对象转换为JSON字符串,存储起来,需要取出的时候,再使用JSON.parse()函数将数据再转换为JS对象。

示例代码:投喂插件1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556// ==UserScript==// @name 示例:存储数据// @author 木落// @version 1.0.0// @description 投喂,格式 .投喂 // @timestamp 1672423909// 2022-12-31// @license Apache-2// @homepageURL https://github.com/sealdice/javascript// ==/UserScript==// 先将扩展模块创建出来,如果已创建就直接使用let ext = seal.ext.find('test');if (!ext) { ext = seal.ext.new('test', '木落', '1.0.0'); seal.ext.register(ext);}const cmdFeed = seal.ext.newCmdItemInfo();cmdFeed.name = '投喂';cmdFeed.help = '投喂,格式: .投喂 \n.投喂 记录 // 查看记录';cmdFeed.solve = (ctx, msg, cmdArgs) => { let val = cmdArgs.getArgN(1); switch (val) { case 'help': case '': { // .投喂 help const ret = seal.ext.newCmdExecuteResult(true); ret.showHelp = true; return ret; } case '列表': case '记录': case 'list': { const data = JSON.parse(ext.storageGet('feedInfo') || '{}'); const lst = []; for (let [k, v] of Object.entries(data)) { lst.push(`- ${k}: 数量 ${v}`); } seal.replyToSender(ctx, msg, `投喂记录:\n${lst.join('\n')}`); return seal.ext.newCmdExecuteResult(true); } default: { const data = JSON.parse(ext.storageGet('feedInfo') || '{}'); const name = val || '空气'; if (data[name] === undefined) { data[name] = 0; } data[name] += 1; ext.storageSet('feedInfo', JSON.stringify(data)); seal.replyToSender(ctx, msg, `你给海豹投喂了${name},要爱护动物!`); return seal.ext.newCmdExecuteResult(true); } }};// 将命令注册到扩展中ext.cmdMap['投喂'] = cmdFeed;ext.cmdMap['feed'] = cmdFeed; 示例代码:群内安价收集

这是关于数据的增加、删除、查询等操作的实现示例(修改的话就是删除之后增加)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151// ==UserScript==// @name 群内安价收集// @author 憧憬少// @version 1.0.0// @description 在群内收集群友给出的安价选项,并掷骰得出结果// @timestamp 1676386517// 2023-02-14 22:55:17// @license MIT// @homepageURL https://github.com/ChangingSelf/sealdice-js-ext-anchor// ==/UserScript==(() => { // src/index.ts const HELP = `群内安价收集(ak是アンカー罗马字缩写)注意ak后面有空格,“.ak”也可以换成“.安价”.ak help //查看帮助.ak # 标题 //新建一轮分歧并设标题.ak + 选项 //需要添加的选项的内容.ak - 序号 //需要移除的选项的序号.ak ? //列出目前所有选项.ak = //随机抽取1个选项并继续.ak = n //随机抽取n个选项并继续`; const STORAGE_KEY = "anchor"; const OPTION_NUM_PER_PAGE = 15;//列出所有选项时,每页放多少个选项 function akNew(ctx, msg, ext, title) { const data = { "title": title, "options": [] }; ext.storageSet(STORAGE_KEY, JSON.stringify(data)); seal.replyToSender(ctx, msg, `已新建分歧:${title}`); } function akAdd(ctx, msg, ext, option) { const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}'); data.options.push(option); seal.replyToSender(ctx, msg, `当前分歧:${data.title}已添加第${data.options.length}个选项:${option}`); ext.storageSet(STORAGE_KEY, JSON.stringify(data)); } function akDel(ctx, msg, ext, index) { const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}'); const removed = data.options.splice(index - 1, 1)[0]; seal.replyToSender(ctx, msg, `当前分歧:${data.title}已移除第${index}个选项:${removed}`); ext.storageSet(STORAGE_KEY, JSON.stringify(data)); } function akList(ctx, msg, ext) { const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}'); if (data.options.length === 0) { seal.replyToSender(ctx, msg, `当前分歧:${data.title}还没有任何选项呢`); return; } let optStr = ""; let curPageRows = 0; data.options.forEach((value, index) => { optStr += `${index + 1}.${value}`; ++curPageRows; if (curPageRows >= OPTION_NUM_PER_PAGE) { seal.replyToSender(ctx, msg, `当前分歧:${data.title}${optStr}`); optStr = ""; curPageRows = 0; } }); if (curPageRows > 0) { seal.replyToSender(ctx, msg, `当前分歧:${data.title}${optStr}`); } } function randomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function akGet(ctx, msg, ext, num = 1) { const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}'); if (data.options.length === 0) { seal.replyToSender(ctx, msg, `当前分歧:${data.title}还没有任何选项呢`); return; } akList(ctx, msg, ext); let optStr = ""; for (let i = 0; i < num; ++i) { const r = randomInt(1, data.options.length); const result = data.options.splice(r - 1, 1); optStr += `${i + 1}.${result}`; } seal.replyToSender(ctx, msg, `结果是:${optStr}`); ext.storageSet(STORAGE_KEY, JSON.stringify(data)); } function main() { let ext = seal.ext.find("anchor"); if (!ext) { ext = seal.ext.new("anchor", "憧憬少", "1.0.0"); seal.ext.register(ext); } const cmdSeal = seal.ext.newCmdItemInfo(); cmdSeal.name = "安价"; cmdSeal.help = HELP; cmdSeal.solve = (ctx, msg, cmdArgs) => { try { let val = cmdArgs.getArgN(1); switch (val) { case "#": { const title = cmdArgs.getArgN(2); akNew(ctx, msg, ext, title); return seal.ext.newCmdExecuteResult(true); } case "+": { const option = cmdArgs.getArgN(2); akAdd(ctx, msg, ext, option); return seal.ext.newCmdExecuteResult(true); } case "-": { const index = Number(cmdArgs.getArgN(2)); akDel(ctx, msg, ext, index); return seal.ext.newCmdExecuteResult(true); } case "?": case "?": { akList(ctx, msg, ext); return seal.ext.newCmdExecuteResult(true); } case "=": { let num = 1; if (cmdArgs.args.length >= 2) { num = Number(cmdArgs.getArgN(2)); } akGet(ctx, msg, ext, num); return seal.ext.newCmdExecuteResult(true); } case "help": default: { const ret = seal.ext.newCmdExecuteResult(true); ret.showHelp = true; return ret; } } } catch (error) { seal.replyToSender(ctx, msg, error.Message); return seal.ext.newCmdExecuteResult(true); } }; ext.cmdMap["安价"] = cmdSeal; ext.cmdMap["ak"] = cmdSeal; } main();})(); 模板

关于取出数据来修改的函数,可以参考如下代码:

123456789101112131415const STORAGE_KEY = "anchor";//将你的key抽出来单独作为一个常量,方便开发阶段修改(使用了之后就不要修改了)//函数:添加选项function akAdd(ctx, msg, ext, option) { //取出数据 const data = JSON.parse(ext.storageGet(STORAGE_KEY) || '{"title":"","options":[]}'); //处理数据 data.options.push(option); //响应发送者 seal.replyToSender(ctx, msg, `当前分歧:${data.title}\n已添加第${data.options.length}个选项:${option}`); //将处理完的数据写回去 ext.storageSet(STORAGE_KEY, JSON.stringify(data));} 8.读取玩家或群组数据

相关API比较多,还是等木落佬写示例代码吧。或者查看下文的API。

9.编写暗骰指令

API似乎未开放。跳过

10.编写代骰指令123456789101112131415161718192021222324252627282930313233343536373839404142434445// ==UserScript==// @name 示例:编写代骰指令// @author 木落// @version 1.0.0// @description 捕捉某人,格式.catch // @timestamp 1671540835// 2022-12-20// @license Apache-2// @homepageURL https://github.com/sealdice/javascript// ==/UserScript==// 编写代骰指令// 先将扩展模块创建出来,如果已创建就直接使用let ext = seal.ext.find('test');if (!ext) { ext = seal.ext.new('test', '木落', '1.0.0'); seal.ext.register(ext);}// 创建指令 .catch// 这个命令的功能为,显示“试图捕捉某人”,并给出成功率// 如果命令写“.catch @张三”,那么就会试着捕捉张三const cmdCatch = seal.ext.newCmdItemInfo();cmdCatch.name = 'catch';cmdCatch.help = '捕捉某人,格式.catch ';// 对这个指令启用使用代骰功能,即@某人时,可获取对方的数据,以对方身份进行骰点cmdCatch.allowDelegate = true;cmdCatch.solve = (ctx, msg, cmdArgs) => { // 获取对方数据,之后用mctx替代ctx,mctx下读出的数据即被代骰者的个人数据 const mctx = seal.getCtxProxyFirst(ctx, msg); let val = cmdArgs.getArgN(1); switch (val) { case 'help': { // 命令为 .catch help const ret = seal.ext.newCmdExecuteResult(true); ret.showHelp = true; return ret; } default: { const text = `正在试图捕捉${mctx.player.name},成功率为${Math.ceil(Math.random() * 100)}%`; seal.replyToSender(mctx, msg, text); return seal.ext.newCmdExecuteResult(true); } }};// 将命令注册到扩展中ext.cmdMap['catch'] = cmdCatch; 11.网络请求

主要使用Fetch API进行网络请求,详细文档见链接。

123456789101112// 请注意,不要使用async/await// 因为目前版本的goja既不支持ES2017标准的async/await语法// 也不支持es6标准的generator,所以polyfill无法工作// 虽然我也不喜欢promise这个套娃语法,但目前这能这么写了// 访问网址fetch('https://api-music.imsyy.top/cloudsearch?keywords=稻香').then((resp) => { // 在返回对象的基础上,将文本流作为json解析 resp.json().then((data) => { // 打印解析出的数据 console.log(JSON.stringify(data)); });});

套用这个模板,你可以写出很多调用API的简单扩展。

比如核心代码只有一行的“随机猫猫图片”扩展:

1seal.replyToSender(ctx, msg, `[CQ:image,file=https://thiscatdoesnotexist.com/,cache=0]`);

核心代码同样只有一行的“随机二次元图片”扩展:

1seal.replyToSender(ctx, msg, `[CQ:image,file=https://api.oick.cn/random/api.php?type=${val},cache=0]`);

当然,也有稍微复杂的,比如“AI骰娘”扩展,但也没有太复杂,只是处理了一下发送者传过来的消息,再发送给网络API,收到响应之后再回应发送者。

它的核心代码如下:

12345678910111213141516171819202122const BID = ''; //填入你的骰娘的大脑的idconst KEY = ''; //填入你的key/** * 给AI主脑发送消息并接收回复 * @param ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等 * @param msg 为原生态的指令内容,如指令文本,发送平台,发送时间等 * @param message 要发送给骰娘的具体消息 */function chatWithBot(ctx,msg,message) { fetch(`http://api.brainshop.ai/get?bid=${BID}&key=${KEY}&uid=${msg.sender.userId}&msg=${message}`).then(response => { if (!response.ok) { seal.replyToSender(ctx, msg, `抱歉,我连接不上主脑了。它传递过来的信息是:${response.status}`); return seal.ext.newCmdExecuteResult(false); } else { response.json().then(data => { seal.replyToSender(ctx, msg, data["cnt"]); return seal.ext.newCmdExecuteResult(true); }); return seal.ext.newCmdExecuteResult(true); } });} 12.自定义COC规则1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// ==UserScript==// @name 示例:自定义COC规则// @author 木落// @version 1.0.0// @description 自设规则,出1大成功,出100大失败。困难极难等保持原样// @timestamp 1671886435// 2022-12-24// @license Apache-2// @homepageURL https://github.com/sealdice/javascript// ==/UserScript==const rule = seal.coc.newRule();rule.index = 20; // 自定义序号必须大于等于20,代表可用.setcoc 20切换rule.key = '测试'; // 代表可用 .setcoc 测试 切换rule.name = '自设规则'; // 已切换至规则文本 name: descrule.desc = '出1大成功\n出100大失败';// d100 为出目,checkValue 为技能点数rule.check = (ctx, d100, checkValue) => { let successRank = 0; const criticalSuccessValue = 1; const fumbleValue = 100; if (d100 Linux服务器间跨平台迁移(arm64->amd64)

首先在你的旧服务器上,关闭海豹进程,随后来到海豹的工作目录,执行

1tar -zcvf ./data.tar ./data

将data目录打包。

现在你多拥有了一个data.tar,复制到新的服务器,预先准备好的海豹程序目录,执行这条命令解压:

1tar --no-same-owner -zxvf data.tar

然后启动海豹即可。

1./sealdice-core

如果文件权限不正确,可以在目录下执行这两条:

12find . -type f | xargs chmod 644find . -type d | xargs chmod 755 特色功能指令兼容性

兼容了溯洄骰、赵骰和塔骰的绝大部分主流指令,无论之前用过哪一个都可以轻松上手。

对格式不敏感,你可以 .r1d20 +1、.r d20+1、.stshow力量 敏捷、。st hp - 1等等各种写法。

易于部署和使用

海豹的设计初衷就是“能被任何TRPG玩家喜爱和使用”,同时秉持”没有提供UI的功能等于不存在“的理念。

只需一个15MB的安装包、一个空闲的QQ号,和5分钟时间,任何人都可以搭建一个QQ骰子。

极少的资源占用

由于Golang的高效,海豹核心只占用大概40MB内存,以及极少的CPU资源。

自带的《COC7怪物之锤》和《DND系列资料》会另外占用50-70MB内存,但能提供极为强大的资料查询功能。

因此总计的初始内存大概在90MB左右。其中有一部分其实是空闲内存,因为go运行时的特性并不立即还给操作系统。

强自定义

提供了友好的GUI界面,可以自定义大部分指令的回复语句。

同时对于自定义回复(即reply)功能进行了强化,可以支持一些逻辑分支。

人工智能鸽子

让您想咕就咕

12.gugu🕊️: 在来开团的路上被巨龙叼走了!

查看鸽子背后的故事

123.gugu 来源🕊️: 前往了一个以前捕鲸的小岛度假~这里人很亲切!但是吃了这里的鱼肉料理之后有点晕晕的诶...想到前几天的短信,还是别追究他为什么不在了。 ——鹊鹊结合实际经历创作 强大的查询功能

海豹搭载了全文搜索技术(仅限PC版),可以看作是一个微型搜索引擎。

可以找一只海豹试下这个指令:

1.查询 30尺 法术

细节可参见 [.find/.查询 查询指令](#.find/.查询 查询指令) 一节

COC特化支持属性同义词

各种旧版翻译、俗称、简繁汉字的属性被视为同一属性。

默认技能等级

内置部分人物卡上没有的默认技能等级。

包括不限于速记、园艺、攀爬、各种武器等等。

支持 .scb 指令

用于在sc时额外摇一个奖励骰。

适用于规则书中,用关键连接自救的部分

见《COC7th守密人核心规则书》第八章 理智 - 增加当前理智值 - 4.自救

同时遇到多个目标的理智检定

指令未完成

DND特化支持属性同义词

功能同COC,但是使用不同的关键字

人物卡录入

参见[.st DND属性设置](#.st DND属性设置)

优势骰劣势骰12.set 20.r d20优势 - d劣势

d20优势 = 2d20k1,即2个d20取结果高的一个

d20劣势 = 2d20q1,即2个d20取结果低的一个

属性调整值和熟练自动计算

临时属性

参见 [.buff 临时属性](#.buff 临时属性)

法术位支持

参见 [.ss 法术位(spell slots)](#.ss 法术位(spell slots))

死亡豁免

参见死亡豁免

休息

参见 [.longrest / .长休](#.longrest / .长休)

通用特化支持对他人做检定 / 属性操作

功能描述见 对他人做检定,同理,可以修改他人的属性。

支持COC的.ra / .rc 指令,DND的除了先攻之外的全部指令

小队 / 批量操作

未完成 但是有热心的社区开发者们制作了类似的插件,你可以在js仓库或用户群中找到更多

可以实时编辑的跑团日志

https://log.sealdice.com/

除了海豹log自用之外,支持QQ格式和塔骰格式。

全选删除现有文本后,全文粘贴到文本框里即可。

是纯净骰,也是娱乐骰

海豹除了核心指令之外,都被设计为可插拔的,目前有7个内置扩展。

关闭对应扩展会连同扩展带来的指令一块关闭。

因此在跑团时,如果你不想要任何娱乐功能,你可以(以COC团为例):

12345678.ext fun off // 关闭.jrrp和.gugu.ext reply off // 关闭关键字回复.ext deck off // 关闭抽牌 .draw.ext dnd5e off // 关闭dnd5e系列指令.ext story off // 关闭.name[随机指令]/.modu[魔都查询]/.who[排序]等也可以写成一行:.ext fun reply deck dnd5e story off

这样一来,就只剩下coc系列指令和log指令了。

这个改动在当前群持续生效,如果想回去可以这样再打开

1.ext fun on

请注意!默认情况下是所有扩展全部开启的,且coc7优先级高于dnd5e。

但这取决于骰主的个人喜好,骰主可以设置刚进群的时候默认开启的扩展。

因此遇到不认识指令你的骰,可以先用.ext看一眼情况。

更强的指令支持

海豹核心将表达式翻译成字节码,丢进指令虚拟机里执行,同时也做了很强的兼容性处理。

可以在不同骰系下测试一下这些指令:

123456789101112.r 30 + (-1d20) + 49.r d20 + (3 + 1d4).r 1 + (3+2)d(4+2d10).sc 0/-1.sc (1+2)/0.sc 0/1d4+(3*2).sc 1 / 2.sc 1/2 + 3.ra b 测试50.ra b 50 测试

彩蛋:

123456789101112131415161718.r 1+d10-3*4 --asm掷出了 1+d10-3*4=1 + 3[1d10=3] - 12=-8=== VM Code ===push 1mark.leftpush 1mark.leftpush 10diceaddmark.leftpush 3mark.leftpush 4mulsubhalt=== VM Code End=== 跨平台

虽然海豹核心目前主要服务于QQ用户,并做了很多对应优化。

但其实QQ本身只是默认被实现的第一个交互端。

海豹核心的底层架构,支持单进程的多骰多号。

多骰即可以执行多个骰子实例,分别拥有不同的自定义设置。好比是你的学校有3个不同的食堂。

多号即每个骰子上,可以绑定N个帐号,就好比是同一个食堂开了多个窗口,卖的东西是一样的。

这里的帐号概念并不局限于QQ,至少可以确定的是,未来会提供骰点HTTP API

2023/2/4 更新: 目前海豹已经支持 Kook(开黑啦) Discord Telegram 甚至是 Minecraft 服务器中使用!你可以在添加账号时的账号类型里看到他们。感谢Szzrain提交的PR。以后也会支持更多的平台

TRPG规则支持列表 COC7 DND5e COC - DeltaGreen (.setcoc dg) 暗影狂奔 (.rsr) WOD/无限团 (.ww) 双十字DoubleCross (.dx) 共鸣性怪异Emoklore (.ek .ekgen)

如果你不跑这些规则,或者角色并无必要,可以在后台关闭对应的指令。

许可协议

兴趣使然之作。

使用造成的任何后果与本人无关。

进行使用即代表同意此声明:

尊敬的用户,欢迎您选择由木落等研发的海豹骰点核心(SealDice),在您使用自定义功能前,请务必仔细阅读使用须知,当您使用我们提供的服务时,即代表您已同意使用须知的内容。

您需了解,海豹核心官方版只支持TRPG功能,娱乐功能定制化请自便,和海豹无关。

您清楚并明白您对通过骰子提供的全部内容负责,包括自定义回复、非自带的插件、牌堆。海豹骰不对非自身提供以外的内容合法性负责。您不得在使用海豹骰服务时,导入包括但不限于以下情形的内容:

(1) 反对中华人民共和国宪法所确定的基本原则的;

(2) 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的;

(3) 损害国家荣誉和利益的;

(4) 煽动民族仇恨、民族歧视、破坏民族团结的;

(5) 破坏国家宗教政策,宣扬邪教和封建迷信的;

(6) 散布谣言,扰乱社会秩序,破坏社会稳定的;

(7) 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;

(8) 侮辱或者诽谤他人,侵害他人合法权益的;

(9) 宣扬、教唆使用外挂、私服、病毒、恶意代码、木马及其相关内容的;

(10)侵犯他人知识产权或涉及第三方商业秘密及其他专有权利的;

(11)散布任何贬损、诋毁、恶意攻击海豹骰及开发人员、海洋馆工作人员、mod编写人员、关联合作者的;

(12)含有中华人民共和国法律、行政法规、政策、上级主管部门下发通知中所禁止的其他内容的。

一旦查实您有以上禁止行为,请立即停用海豹骰。同时我们也会主动对你进行举报。

联系方式海洋馆工作人员

木落 (fy0748#gmail.com)

Yumeno(184023393)

鹊鹊(1251343516)

作者Github

https://github.com/fy0

官方站点

http://sealdice.com/

建设中,预计提供log染色、人物卡制作、新版本发布、云人物卡、自动更新等功能。

log染色: https://log.sealdice.com/

投喂

请参见官网——投喂部分,目前尚未更新蓝绿修改器(暂时不顾上)。

https://sealdice.com/feed

你的投喂将用于支付服务器费用,

以及帮助社畜制作者们稍微抵抗来自现实的引力。

非常感谢。

用户群

​ 主群: 524364253

​ 分群: 562897832



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3